我想为此网址添加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); } }
您没有与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中没有指定。
谢谢你的帮助。我已将上面的站点地图代码更改为以下代码,从而解决了我的问题:
> <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>