【问题标题】:how to add url parameteres in MvcSiteMapProvider nodes?如何在 MvcSiteMapProvider 节点中添加 url 参数?
【发布时间】:2014-07-26 11:24:21
【问题描述】:

我想为这个 url 添加 MvcSiteMapProvider 节点:

.../AdminsArea/Orders?type=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>

我该怎么办? 谢谢。

控制器:

公共类 OrdersController : 控制器

{  public ActionResult Index(short type)
     {
       ///some codes... 
         return View(myOrder);
    }
 }

【问题讨论】:

  • 请分享你的控制器..
  • @KartikeyaKhosla 我现在添加了我的控制器。
  • type 的值为 null???
  • @KartikeyaKhosla 不,它正在获得价值。我想防止为不同类型创建两个表单。
  • 我没有得到你@mortazavi 你想用类型做什么??

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


【解决方案1】:

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

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

很难猜测您要达到的目标,但如果您尝试为每个“类型”参数创建 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 也不会有什么坏处。

更新

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

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

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

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

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

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

【讨论】:

  • 感谢您的帮助...但我想使用 type=10 或 type=20 显示不同的标题。
【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多