在父痕迹中保留查询字符串参数(SiteMapPath)

时间:2014-01-22 11:27:29

标签: asp.net webforms

我正在寻找一种在使用标准<asp:SiteMapPath>实现导航回堆栈时保留查询字符串参数的方法。

为简单起见,假设我有一个Animal > Breed页面堆栈:

 <siteMapNode url="~/Animal.aspx" title="Animal" >
    <siteMapNode url="~/Breed.aspx" title="Breed"/>  
</siteMapNode>

我导航到Animal.aspx?type=Dog并选择一个狗品种导航到Breed.aspx?type=Bulldog

Breed.aspx我有正确的面包屑Animal > Breed,但Animal网址只是Animal.aspx。如何将Animal链接作为父/上一页Animal.aspx?type=Dog

在这个简单的例子中,我意识到我可以将所有动物类型添加为具有相关类型的单独节点。我的实际设置更复杂,需要从数据库中读取ID。

2 个答案:

答案 0 :(得分:0)

您可以将参数附加到用户要点击的任何链接以导航...

所以你会使用像

这样的东西
mytype = Request.QueryString["type"];

获取值,将其应用于链接...

mylink.NavigateURL = "animal.aspx?type="+mytype;

我是在编辑器外做的,所以你需要注意语法错误...

这里有一些文档...

http://msdn.microsoft.com/en-us/library/ms524784(v=vs.90).aspx

答案 1 :(得分:0)

作为accepted answer here我在详细页面中添加了以下内容(示例中为Breed.aspx)

     protected void Page_Load(object sender, EventArgs e){
            if (!IsPostBack)
                SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
     }

     SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e){
            SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);

            currentNode.ParentNode.Url += "?type=" + this.Breed.AnimalType;

            return currentNode;
        }

修改

似乎运作良好

网址已更新但我在菜单控件中大量使用CurrentNode在网站地图中上下导航。当我克隆我失去兄弟信息打破我的菜单。

我要么找到一种克隆方法,它保留整个站点地图或找到另一种修改ParentNode.Url的方法