【问题标题】:Removing a Route parameter from an ActionLink in MVC4从 MVC4 中的 ActionLink 中删除 Route 参数
【发布时间】:2014-04-24 13:59:07
【问题描述】:

我遇到了一个问题,RouteData 值在我的视图中挥之不去,让我的 @Html.ActionLink(...) 看起来有点难看。

在我的路线中,我有这个:

routes.MapRoute(
    name: "SubItemLinked",
    url: "SubItems/{subitemId}/{controller}/{action}/{id}",
    defaults: new { controller = "DeepDownItems", action = "Index", id = UrlParameter.Optional },
    constraints: new { subitemId = "^[0-9]*$", id = "^[0-9]*$" }
);

routes.MapRoute(
    name: "ItemLinked",
    url: "Items/{itemId}/{controller}/{action}/{id}",
    defaults: new { controller = "SubItems", action = "Index", id = UrlParameter.Optional },
    constraints: new { itemId = "^[0-9]*$", id = "^[0-9]*$" }
);

以上允许我拥有这样的网址:

  • ~/Items/3
  • ~/Items/3/SubItems/Create
  • ~/SubItems/5

等等……

现在,DeepDownItems 控制器当然会识别subitemId 参数并将其用于从数据库中检索内容。问题是,如果我想将链接放回 SubItems 列表,我不再需要这个 subitemId,我需要将它从 RouteValueDictionary 中删除。

作为流程的一个例子,假设我去~/SubItems/5,我看到了SubItem 5 的所有DeepDownItems 的列表,这是正确的。在那个视图中我有这个:

@Html.ActionLink("Go Back", "Index", "SubItems", new { itemId = ViewBag.itemid, subitemId = String.Empty }, null)

根据 Routes,这应该会生成一个指向 ~/Items/3 的链接。我必须输入subitemId = String.Empty,否则它会与顶级路线相匹配。问题是生成的url是这样的~/Items/3?subitemId=5,所以基本上是正确匹配了Route但是没有按照说明清除subitemId参数。

您对如何操作有任何想法吗?请注意,我在视图上有其他链接(编辑/创建)依赖于该参数存在并自动添加,因此我真的只想从该链接中删除它,而不是从整个字典中删除。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


    【解决方案1】:

    不确定这是否是我过去几个小时一直在努力解决的问题,但如果是:尝试使用@Html.RouteLink,您可以在其中指定从哪个路由创建链接。

    如果我设法破译了您的示例,则类似于以下内容:P

    @Html.RouteLink("Go Back", "ItemLinked", new {
            controller = "SubItems",
            action = "Index", 
            itemId = ViewBag.itemid,
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多