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