擴展-->爲ASP.NET 2.0菜單控件(menu, repeater)增加target屬性

asp.net中sitemap中的菜單節點在點擊後,默認是在本頁面打開連接, 就是說a的target是_self, 現在想要有一些節點實現target=_blank的效果,  想了一下, sitemap既然是xml的,應該可自定義屬性的, 所以自定義了一個target屬性--<siteMapNode url="~/a.aspx" target="_blank" title="aaa"  description="" />, 在repeater綁定裏<a href='<%# Eval("url")%>' target='<%# Eval("target")%>'>, 發現是不可行的, 微軟內置讀sitemap的類裏是不可讀取sitemap自定議屬性的,

突然發現有description屬性沒有用上,就用這個吧<siteMapNode url="~/a.aspx"  title="aaa"  description="_blank" /> 綁定: <a href='<%# Eval("url")%>' target='<%# Eval("description")%>'>,發現這種方式真的可行.

到網上看一下別人怎麼做的, 搜了一下,發現一篇文章, http://www.wangchao.net.cn/bbsdetail_545376.html 裏頭是這樣實現的

首先在sitemap文件添加自己定義屬性,這裏我們用 target <siteMapNode title="首頁" description="" target="_blank" url="~/Default.aspx" /> 然後爲 Menu 控件添加 MenuItemDataBound 事件處理代碼
  protected void MyMenu_MenuItemDataBound(object sender, MenuEventArgs e)
  {
  string target = ((SiteMapNode)e.Item.DataItem)["target"];
  if (target != null && target.Length > 0) e.Item.Target = target;
  }

 

有樣學樣,我也這樣做,雖然我用的是repeater,

sitemapnode這樣寫<siteMapNode url="/a.aspx" target="_blank"  title="test"  description="" />

綁定代碼是<a href='<%# Eval("url")%>'>

後臺在repeater的事件中這樣寫

         protected void repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            //set CEO link as a new open form
            string target = ((SiteMapNode)e.Item.DataItem)["target"];
            if (target != null && target.Length > 0)
            {
                string tempString = "";
                if (e.Item.HasControls())
                {
                    //get original control
                    System.Web.UI.DataBoundLiteralControl originControl;
                    originControl = e.Item.Controls[0] as System.Web.UI.DataBoundLiteralControl;

                    //define a new control
                    System.Web.UI.DataBoundLiteralControl tempControl = new DataBoundLiteralControl(1, 1);;
                    //use old control's source string, and add target
                    tempString = originControl.Text.Replace("<a href=", "<a target='_blank' href=");
                    tempControl.SetDataBoundString(0, tempString);
                    //tempControl.SetStaticString(0, tempString);

                    e.Item.Controls.Add(tempControl);
                    e.Item.Controls.Remove(originControl);
                }
            }
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章