我在这里有一些令人沮丧和困惑的情况。所以,让我详细解释一下。 对于菜单: 我有一个绑定到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>
我有什么选择让事情有效?
答案 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>