Translate

2011年10月26日 星期三

Web.sitemap 自帶參數

最近遇到要同時傳兩個參數到網頁,但發現網路上大多都是自已動態生成…
偏偏覺得是個小網站,又放一個動態生成的話,實在太廢力了…
好加在後來有找到解決方法了~就在此分享並筆記一下
因為一個問題,而不同的解答
從而學到更多,大概也是我喜歡寫程式的因素…

當你要連的url是這種情形:

http://test/bookclass.aspx?type=1&id=25

sitemap如果能好解決的話

通當是這樣:(Web.sitemap)
<siteMapNode url="http://test/bookclass.aspx?type=1&id=25" title="百科全書"  description="" />

喔…對了,要改成
<siteMapNode url="http://test/bookclass.aspx?type=1&amp;id=25" title="百科全書"  description="" />

我想網路應該可以找到很多這種提示

字元
'&apos;
"&quot;
&&amp;
<&lt;
>&gt;
換行Chr(10),Chr(13)
TabChr(9)
space&#160;Chr(20)


另外再補充一則連結→http://blog.csdn.net/foamflower/article/details/4678312
有興趣可以看一下…

通常這樣Web.sitemap大概就可以解決很多問題,但是:p
不幸的事總是常發生
http://test/bookclass.aspx?type=1&id=25→type=1是百科全書,而且id可能從1~100都是
http://test/bookclass.aspx?type=2&id=25→type=2是程式用書,而且id也是1~100都是

後來發現這篇→http://www.cnblogs.com/mxh691/archive/2011/05/27/2059933.html#commentform
解決了一切參數的問題>"<
照著他的參考,又改成我想要的,不用生成啥sitemap,雖然這也是一勞永逸…

將參考的code po在下面,有興趣可以玩玩,並祝有個愉快的一天

Web.sitemap

//之後的id再補
<siteMapNode url="~/test/bookclass.aspx?type=1" title="百科全書"  description="" />
<siteMapNode url="~/test/bookclass.aspx?type=2" title="程式用書"  description="" />

Default.master.cs

using System.Web;


public partial class Default_master : System.Web.UI.MasterPage
{
    private string sid; //書的id
    private string stype; //書的type


protected void Page_Load(object sender, EventArgs e)
{
       //先將參數抓出來
       sid= Request.QueryString.Get("id");
       stype= Request.QueryString.Get("type");
      SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
}


SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
         //只需一個執行一個請求
        SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);


        //需傳的Node
        SiteMapNode currentNode = null;


        //如果已有找到Node,就設定為新的clone就好了
        if (SiteMap.CurrentNode != null)
        {
            currentNode = SiteMap.CurrentNode.Clone(true);
        }
        else
        {
            //如果為空,判定抓取參數
            if (sid!= "" && stype != "")
            {
                 //將sitempa的點抓出來
                SiteMapNode smn = SiteMap.Provider.FindSiteMapNode(@"~/test/bookclass.aspx?type=" + type);
                //重設定一個新的連結
                string newurl = smn.Url + @"&amp;id=" + topicid;
                //重做一個新的連結點(smn.Url 是唯讀),基本都跟smn一樣,只是url變成新的而已
                SiteMapNode newnode = new SiteMapNode(this.SiteMapPath1.Provider, smn.Key, newurl, smn.Title, smn.Description);
                newnode.ParentNode = smn.ParentNode;
                currentNode = newnode;
            }
        }
        return currentNode;
}
}

補充:如果是放在website同一層資料夾的話
用下可面的寫法,可能會讀不到
<siteMapNode url="bookclass.aspx?type=1" title="百科全書"  description="" />
建議加入
<siteMapNode url="~/bookclass.aspx?type=1" title="百科全書"  description="" />





good luck~=V=

另外偷補一個→http://blog.faq-book.com/?p=1940
用string.Format來將Eval的資料繫結帶到網址後面的對應位置
俺的作法(紅字代表連結的資料庫的欄位名稱)


<asp:HyperLinkField DataNavigateUrlFields="type,id"
                DataNavigateUrlFormatString="bookclas.aspx?type={0}&id={1}"
                ItemStyle-HorizontalAlign ="Left" ItemStyle-width ="200"
                DataTextField="name">


接著補(總覺得應該開新版了)→http://download.csdn.net/detail/dyx2525775/2635106
防圖片被盜連

沒有留言:

張貼留言