多个站点地图节点,具有相同的站点地图网址

时间:2015-02-28 05:27:29

标签: menu sitemap

我在这里有一些令人沮丧和困惑的情况。所以,让我详细解释一下。 对于菜单: 我有一个绑定到Sitemap的水平菜单(不关心现在的站点地图)。点击后的所有菜单项都会将用户引导到一个页面,即带有查询字符串的〜/ Categories.aspx。我有一个onMenuItemClick事件如下:

protected void myMenu_MenuItemClick(object sender, MenuEventArgs e)
{
    // this is the menu itself, you can iterate the Items collection if you need.
    var menu = (sender as Menu);
    foreach (MenuItem item in menu.Items)
    {
        System.Diagnostics.Debug.Print(item.Text);
    }

    // this is the MenuItem object that was clicked
    var clickedMenuItem = e.Item;

    // store text value in your session
    Session["1"] = e.Item.Text;

    // redirect
    Response.Redirect("~/CategorySearch.aspx?Category=" + e.Item.Text);
}   

当我手动填充菜单项时,上面的代码工作正常。现在我想将站点地图绑定到我的菜单,我的问题是所有的菜单项都有相同的URL引发异常,因为URL必须是唯一的。

这是我的站点地图:

    <?xml version="1.0" encoding="utf-8" ?>
   <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
   <siteMapNode title="DummyRoot">
    <siteMapNode url="~/Home.aspx" title="Home" />
    <siteMapNode url="~/Category.aspx" title="Track Events">
      <siteMapNode url="~/Category.aspx" title="Athletics" />
      <siteMapNode url="~/Category.aspx" title="Cycling" />
      <siteMapNode url="~/Category.aspx" title="Equestrian Sports" />
      <siteMapNode url="~/Category.aspx" title="Motor Sports" />
      <siteMapNode url="~/Category.aspx" title="Marathon" />
    </siteMapNode>
    <siteMapNode url="~/Category.aspx" title="Court Events">
      <siteMapNode url="~/Category.aspx" title="Volleyball" />
      <siteMapNode url="~/Category.aspx" title="Tennis" />
      <siteMapNode url="~/Category.aspx" title="Squash" />
    </siteMapNode>
    <siteMapNode url="~/Category.aspx" title="Field Events">
      <siteMapNode url="~/Category.aspx" title="Archery" />
      <siteMapNode url="~/Category.aspx" title="Football" />
      <siteMapNode url="~/Category.aspx" title="Cricket" />
    </siteMapNode>
</siteMapNode>

我有什么选择让事情有效?

1 个答案:

答案 0 :(得分:0)

要拥有有效的站点地图文件,您不能拥有两个具有相同网址的节点。

在您的情况下,您拥有动态内容,因此您无法在编译时了解所有节点。因此,要解决您的问题,您需要在运行时更改站点地图的节点。您可以在此处查看可能的解决方案:Adding dynamic nodes to ASP.NET site maps at runtime by deriving from StaticSiteMapProvider

不要忘记为每个菜单项编写完整的Url。例如:

<siteMapNode url="~/CategorySearch.aspx" title="Track Events">
  <siteMapNode url="~/CategorySearch.aspx?Category=Athletics" title="Athletics" />
</siteMapNode>