我遇到一个问题,路径数据值在我的视图中挥之不去,让我的@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
< =将显示商品编号3的所有子项目~/Items/3/SubItems/Create
< =完全符合您的期望~/SubItems/5
< =显示SubItem编号为5的所有DeepDownItems 依旧......
现在,DeepDownItems
控制器当然会识别subitemId
参数并将其用于从数据库中检索内容。问题是,如果我想将链接放回SubItems列表,我不再需要这个subitemId,我需要将它从RouteValueDictionary中删除。
作为流程的示例,我们假设我转到~/SubItems/5
,我看到了SubItem 5的所有DeepDownItems
的列表,这是正确的。在那个视图中我有这个:
@Html.ActionLink("Go Back", "Index", "SubItems", new { itemId = ViewBag.itemid, subitemId = String.Empty }, null)
根据路线,这应该生成~/Items/3
的链接。我不得不放subitemId = String.Empty
或者它与顶级路线相匹配。问题是生成的url与此~/Items/3?subitemId=5
类似,因此基本上正确匹配Route但是它没有按照指示清除subitemId
参数。
您对如何做有任何想法吗?请注意,我在视图上有其他链接(编辑/创建)依赖于该参数存在并自动添加,所以我真的只想从该链接而不是整个字典中删除它。
答案 0 :(得分:0)
不确定这是我过去几个小时一直在争吵的问题,但如果是:尝试使用@Html.RouteLink
,您可以指定从哪条路线创建链接。
如果我能够破译你的例子,那么就像下面这样:P
@Html.RouteLink("Go Back", "ItemLinked", new {
controller = "SubItems",
action = "Index",
itemId = ViewBag.itemid,
})