我有一个简单的站点地图:
<mvcSiteMapNode title="Projects" controller="Projects" action="Index"> <!--This wraps the entire site since Projects Index is the homepage-->
<mvcSiteMapNode title="Projects" controller="Projects" action="Index">
<mvcSiteMapNode title="Project" controller="Projects" action="Details">
<mvcSiteMapNode title="Session" controller="Session" action="DetailsNew" />
<mvcSiteMapNode title="Edit Session" controller="Session" action="Edit" />
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="My Account" controller="Account" action="ChangePassword" />
<mvcSiteMapNode title="Admin" controller="Admin" action="Index" >
<mvcSiteMapNode title="Create User" controller="Admin" action="AddUser" />
<mvcSiteMapNode title="Manage Users" controller="Admin" action="Users" />
</mvcSiteMapNode>
</mvcSiteMapNode>当我将@Html.MvcSiteMap().SiteMapPath()放在我的项目详细信息页面上时,什么都不会显示。想法?
发布于 2014-02-21 10:34:07
当添加自定义路由值( "area“、”控制器“或”action“除外)时,需要显式指定如何匹配它。
默认情况下,您需要为每个潜在的路由键值创建一个节点。例如,如果您有一个名为" id“的路由密钥,并且有id为"1”、"2“和"3”的记录,则需要为每个id创建一个节点。
<mvcSiteMapNode title="Project 1" controller="Project" action="Details" id="1">
<mvcSiteMapNode title="Project 2" controller="Project" action="Details" id="2">
<mvcSiteMapNode title="Project 3" controller="Project" action="Details" id="3">您已经发现了另一种选择,即使用preservedRouteParameters。这将使节点始终匹配路由密钥,而不管其值如何,对于执行CRUD操作的管理页来说,这通常是理想的解决方案。
<mvcSiteMapNode title="Edit Project" controller="Project" action="Edit" preservedRouteParameters="id">通常,当您这样做时,您必须稍微修正一下显示,因为在菜单上有一个编辑节点没有多大意义(通常从记录列表中选择编辑),当您选择它时,通常希望节点显示您选择的记录。您可以使用FilteredSiteMapNodeVisibilityProvider和SiteMapTitleAttribute来完成这个任务。
有关您通常如何设置一组CRUD操作的完整可下载演示,请参阅题为如何使MvcSiteMapProvider记住用户的位置的博客文章。
https://stackoverflow.com/questions/21913779
复制相似问题