0

以下是我的站点地图代码:

<mvcSiteMapNode title="Partner" controller="Partner" key="Partner" action="ShowPartners" >
  <mvcSiteMapNode title="ISP" controller="ISP" key="ISP"  action="ShowPartnersIsps" preservedRouteParameters="Id" >
    <mvcSiteMapNode title="Operator" controller="Operator" key="Operator"  action="ShowIspsOperators" preservedRouteParameters="Id" >
      <mvcSiteMapNode title="Subscriber" controller="Subscriber" key="Subscriber"  action="ShowOperatorsSubscribers" preservedRouteParameters="Id" >
        <mvcSiteMapNode title="Router" controller="Router" key="Router"  action="ShowSubscribersRouters" preservedRouteParameters="Id" />
      </mvcSiteMapNode>
    </mvcSiteMapNode>
  </mvcSiteMapNode>
</mvcSiteMapNode>

以下是我的 route.config

        routes.MapRoute(
            "GetPartnerRoute",
            "Partner/ShowPartners/{search}",
            new { controller = "Partner", action = "ShowPartners", Search = UrlParameter.Optional }
        );

        routes.MapRoute(
          "GetISPRoute",
             "ISP/ShowPartnersIsps/{Id}/{Search}",
            new { controller = "ISP", action = "ShowPartnersIsps", Id = UrlParameter.Optional, Search = UrlParameter.Optional }
        );

        routes.MapRoute(
            "GetOperatorRoute",
            "Operator/ShowIspsOperators/{Id}/{Search}",
            new { controller = "Operator", action = "ShowIspsOperators", Id = UrlParameter.Optional, Search = UrlParameter.Optional }
        );

        routes.MapRoute(
            "GetSubscriberRoute",
            "Subscriber/ShowOperatorsSubscribers/{Id}/{Search}",
            new { controller = "Subscriber", action = "ShowOperatorsSubscribers", Id = UrlParameter.Optional, Search = UrlParameter.Optional }
        );

        routes.MapRoute(
            "GetRouterRoute",
            "Router/ShowSubscribersRouters/{Id}/{Search}",
            new { controller = "Router", action = "ShowSubscribersRouters", Id = UrlParameter.Optional, Search = UrlParameter.Optional }
        );

所有节点的 id 参数都不相同。

在上述情况下。

每个节点都有不同的“Id”值。每个节点都不相似。通过重命名“Id”,我可以达到我的预期。但我不能更改“Id”的名称。因此,当我转到具有参数“Id”的子节点时,它会为其父节点设置相似的值。

以下是我检查后的代码:

主页 >

    <a href="/Partner/ShowPartners" title="Partner">Partner</a>
     &gt; 

    <a href="/ISP/ShowPartnersIsps/268e4984-0923-4db7-8dd3-78564663e4d1" title="ISP">ISP</a>
     &gt; 

    <a href="/Operator/ShowIspsOperators/268e4984-0923-4db7-8dd3-78564663e4d1" title="Operator">Operator</a>
     &gt; 

    <a href="/Subscriber/ShowOperatorsSubscribers/268e4984-0923-4db7-8dd3-78564663e4d1" title="Subscriber">Subscriber</a>
     &gt; 

“268e4984-0923-4db7-8dd3-78564663e4d1”对于每个节点都是相似的。这应该是不同的。

我怎么能做到这一点。请帮忙

4

1 回答 1

0

使用时,这些值从当前请求preservedRouteParameters中“保留” 。根据定义,这意味着路由值只能用于单一目的(尽管该目的可以跨越多个节点)。

有两种方法可以克服这个问题:

  1. 为每个目的使用不同的路由键({ispId}{operatorId}等)。
  2. 不要使用preservedRouteParameters,而是使用 MvcSitemapProvider id` 的默认行为which expects a unique node per您可以使用动态节点提供程序建立父子关系。

第一个选项更具可扩展性。第二个选项为您提供更多控制(但只能扩展到大约 10,000 个节点)。

请注意,preservedRouteParameters要正常工作,您需要将所有祖先的路由值放入当前请求中。因此,例如,您必须提供节点。即使您的操作方法可能不需要它,父节点仍然可以正确构建 URL。ispIdOperatorISP

在此处查看这两个选项的演示:https ://github.com/NightOwl888/MvcSiteMapProvider-Remember-User-Position

于 2017-01-20T21:39:43.447 回答