我最近开始使用marteenba的sitemap provider,因为我无法解决其他站点地图的路线问题。它比我以前的方式更好。我的问题是:如何从进入单个主页的页面创建不同的痕迹痕迹?考虑以下想法:
站点地图结构
<mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="Clients Search" controller="ClientBussiness" action="ClientSearch" description="Clients Search">
<mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/>
</mvcSiteMapNode>
<mvcSiteMapNode title="Advanced Search" controller="ClientBussiness" action="AdvancedSearch" description="Clients Advanced Search">
<mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/>
</mvcSiteMapNode>
<mvcSiteMapNode title="Another Search" controller="ClientBussiness" action="AnotherSearch" description="Clients Another Search">
<mvcSiteMapNode title="Contract Analysis" controller="Contract" action="Index"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
在上面的示例中,我的痕迹痕迹始终显示节点“客户端搜索”而不是任何其他节点。我不知道是否应该为每种搜索创建不同的路由(我在上一个站点地图上做了这个,但不幸的是iis6不喜欢它。)
感谢您的帮助。
修改
在论坛上搜索我发现了一个类似的问题。因此,请考虑以下结构:Home >> Search >> Contracts
Home >> Another Search >> Contracts
Home >> Advanced Search >> Contracts
Home >> Web Service Search >> Extra fields >> Contracts
答案 0 :(得分:5)
好吧,我需要做的就是在控制器上添加一些动态节点属性。您可以阅读如何操作here。使用上面的例子,这是它的完成方式:
[MvcSiteMapNodeAttribute(Title = "Search", Key = "search", ParentKey = "ContractSearch", Route = "SearchRoute")]
[MvcSiteMapNodeAttribute(Title = "AdvancedSearch", Key = "ContractAdvSearch", ParentKey = "AdvSearch", Route = "AdvSearchRoute")]
[MvcSiteMapNodeAttribute(Title = "AnotherSearch", Key = "ContractAnotherSearch", ParentKey = "AnotherSearch", Route = "AnotherSearchRoute")]
public ActionResult ContractIndex()
{
//Things to do...
}
在上面的示例中,将在面包屑路径上正确定义每种搜索。
请记住,您必须为要使用的每种“搜索”定义不同的路线。因此,如果您希望有3个节点指向同一个网址,则每个节点必须拥有自己的路由,并且它是MvcSiteMapNodeAttribute
上定义的密钥。