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

时间:2014-07-26 11:24:22

标签: asp.net-mvc asp.net-mvc-4 sitemap url-parameters mvcsitemapprovider

我想为此网址添加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);
    }
 }

2 个答案:

答案 0 :(得分:2)

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

如果您使用的是默认路由(将#34; id&#34;定义为可选),则表示您没有获得匹配,因为您正在定义&#34; id&#34;在每个节点中,但您的网址并未使用&#34; id&#34;。使用当前配置,要访问带有标题&#34; OrderStuff&#34;的节点,您需要转到URL /AdminsArea/Orders/Index/10/?type=20

很难猜出你想要实现的目标,但是如果你想为每个人创造一个节点&#34;输入&#34;参数和可能的值为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>

然后导航到网址/AdminsArea/Orders?type=20将匹配具有标题&#34; OrderGroup&#34;的节点。

使节点配置与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>

这将为&#34;类型&#34;匹配相同的动作方法(因此&#34;形式&#34;)。换句话说,以下所有网址都会匹配标题为&#34; OrderStuff&#34;的节点。

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

但是,MvcSiteMapProvider只会生成一个&#34;类型&#34;当传入的URL具有&#34;类型&#34;参数。通常,这些URL需要从MvcSiteMapProvider外部的源创建(例如视图内容中的ActionLink或外部网站或电子邮件中的链接)。

问题是你要指定&#34; id&#34;在节点配置中但不在URL中。

答案 1 :(得分: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>