在MvcSiteMapProvider中指定父节点的参数

时间:2016-05-09 18:38:58

标签: asp.net-mvc mvcsitemapprovider

我有这样的站点地图:

<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

这可能吗?我不确定用什么术语来描述它。

1 个答案:

答案 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