如何在MvcSiteMapProvider节点中添加url参数?

问题描述 投票:1回答:2

我想为此网址添加MvcSiteMapProvider节点:

... / AdminsArea /订单?类型= 20

我将此行添加到mvc.sitemap,但它没有显示任何痕迹。

<mvcSiteMapNode title="Orders" area="AdminsArea" controller="Home" action="Index">
      <mvcSiteMapNode title="OrderStuff" area="AdminsArea" controller="Orders" action="Index" preservedRouteParameters="type" id="10"  />
    <mvcSiteMapNode title="OrderGroup" area="AdminsArea" controller="Orders" action="Index" preservedRouteParameters="type" id="20"/>

  </mvcSiteMapNode>

我该怎么办?谢谢。

控制器:

public class OrdersController:Controller

{  public ActionResult Index(short type)
     {
       ///some codes... 
         return View(myOrder);
    }
 }
asp.net-mvc asp.net-mvc-4 sitemap url-parameters mvcsitemapprovider
2个回答
2
投票

您没有与URL /AdminsArea/Orders?type=20匹配的节点配置。

如果您使用默认路由(将“id”定义为可选),则表示您没有获得匹配,因为您在每个节点中定义了“id”的值,但您的URL不使用“id”。使用当前配置,要访问标题为“OrderStuff”的节点,您需要转到URL /AdminsArea/Orders/Index/10/?type=20

很难猜出你想要实现的目标,但是如果你想为每个“type”参数创建1个节点,并且可能的值是10和20,那么你应该使用这个配置。

<mvcSiteMapNode title="Orders" area="AdminsArea" controller="Home" action="Index">
    <mvcSiteMapNode title="OrderStuff" area="AdminsArea" controller="Orders" action="Index" type="10" />
    <mvcSiteMapNode title="OrderGroup" area="AdminsArea" controller="Orders" action="Index" type="20" />
</mvcSiteMapNode>

然后导航到URL /AdminsArea/Orders?type=20将匹配具有标题“OrderGroup”的节点。

使节点配置与URL匹配是一个手动过程。要了解匹配行为的工作原理,请阅读How to Make MvcSiteMapProvider Remember a User's Position并查看本文附带的可下载演示。

检查您的区域注册以确保它遵循correct conventions也不会有害。

更新

根据您的意见,我会说这是您所追求的配置:

<mvcSiteMapNode title="Orders" area="AdminsArea" controller="Home" action="Index">
    <mvcSiteMapNode title="OrderStuff" area="AdminsArea" controller="Orders" action="Index" preservedRouteParameters="type" />
</mvcSiteMapNode>

这将使“类型”的任何值匹配相同的操作方法(因此“形式”)。换句话说,以下所有URL都将匹配标题为“OrderStuff”的节点。

  • /AdminsArea/Orders
  • /AdminsArea/Orders?type=10
  • /AdminsArea/Orders?type=20

但是,当传入的URL具有“type”参数时,MvcSiteMapProvider将仅生成带有“type”参数的URL。通常,需要从MvcSiteMapProvider外部的源(例如视图内容中的ActionLink或来自外部网站或电子邮件的链接)创建这些URL。

问题是您在节点配置中指定了“id”而在URL中没有指定。


2
投票

谢谢你的帮助。我已将上面的站点地图代码更改为以下代码,从而解决了我的问题:

> <mvcSiteMapNode title="Orders" area="AdminsArea" controller="Home"
> action="Index">
>       <mvcSiteMapNode title="OrderStuff" url="/AdminsArea/Orders?type=10"  />
>     <mvcSiteMapNode title="OrderGroup" url="/AdminsArea/Orders?type=20"/>
> 
>   </mvcSiteMapNode>
© www.soinside.com 2019 - 2024. All rights reserved.