我有这样的站点地图:
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Contact" controller="Home" action="Contact"/>
<mvcSiteMapNode title="Project" controller="project" action="Index">
<mvcSiteMapNode title="Edit a Project"
controller="project" action="edit" preservedRouteParameters="id"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
如果我在编辑页面上的网址如下:
本地主机/项目/编辑/ 12de8b10-AAAE-ebbb-CCCC-00215e466552
我希望Project的breadcrumb链接为:
本地主机/项目/?专案编号= 12de8b10-AAAE-ebbb-CCCC-00215e466552
这可能吗?我不确定用什么术语来描述它。
答案 0 :(得分:0)
MvcSiteMapProvider
将URL生成委托给MVC UrlHelper
类。该类依次使用您的路由来确定如何生成URL。因此,您要对URL进行的任何更改都应使用路由完成。对于这种特殊情况,您需要添加自定义路由。
注意:路由不处理查询字符串参数。但是,在生成将未定义的路由值放入的URL时,它会将其值附加到查询字符串。请注意,从技术上讲,这并不算作&#34;路由&#34; - 这些参数永远不会放在传入请求的路由值集合中,因此默认情况下它们将被
MvcSiteMapProvider
忽略。与查询字符串值不同,默认情况下不会忽略路由值,因此您必须始终考虑它们。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Project",
url: "project",
defaults: new { controller = "Project", action = "Edit" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
然后您的SiteMap配置应为
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Contact" controller="Home" action="Contact"/>
<mvcSiteMapNode title="Project" controller="Project" action="Index">
<mvcSiteMapNode title="Edit a Project"
controller="Project" action="Edit" />
</mvcSiteMapNode>
</mvcSiteMapNode>
然后,您需要提供projectid
才能通过自己的ActionLink
访问该页面。
@Html.ActionLink("Edit Project", "Edit", "Project", new { projectid = "12de8b10-aaae-ebbb-cccc-00215e466552" }, null)
将转到网址localhost/project/?projectid=12de8b10-aaae-ebbb-cccc-00215e466552
。