TagHelper 可以将路由参数作为链接的一部分传递

82
在链接中指定asp-controllerasp-action时,如何传递id属性?
例如:如果我想链接到给定对象的编辑URL,则所需的URL将为/user/edit/5
是否有一种使用TagHelpers实现这一目的的方法,还是我们仍然需要回退到@Html.ActionLink()
4个回答

122
你可以使用属性前缀 asp-route- 来给你的路由变量名加上前缀。
例子: <a asp-action="Edit" asp-route-id="10" asp-route-foo="bar">编辑</a>

3
我无法使其工作,因为我的“asp-route-foobar”与我的路由不匹配:“routes.MapRoute(“yearNoCombo”,template:”{controller = Home} / {action = Index} / {foobar?} / {whatever1} / {whatever2}”); - 路由名称必须匹配。希望对其他人有所帮助。 - Morten Nørgaard
1
除了以上的评论,你需要确保你的路由设置正确,以避免路由位作为参数出现在HTML中。可以使用MapRoute或方法上的路由注释来实现。 - Calanus
@Kiran,我可以在 asp-route 动态传递对象吗? - user123456
@user123456 这可以通过将 Dictionary<string, string> 传递给 all-route-data 参数来完成。 - CrazyPyro

45
我建议结合另外两个答案,但需要更详细的解释。您可以使用属性前缀asp-route-{name},其中{name}是您想要使用的路由参数的名称。换句话说,如果路线中的数字5作为ID值传递到控制器中,您可以这样写:
<a asp-controller="User" asp-action="Edit" asp-route-id="@item.ID">Edit</a>

或者,如果你想要传递给路由的参数是item.UserName,则

<a asp-controller="User" asp-action="Edit" asp-route-username="@item.UserName">Edit</a>

如果您同时拥有这两个参数,那么

<a asp-controller="User" asp-action="Edit" asp-route-id="@item.Id" asp-route-username="@item.UserName">Edit</a>

这对我来说比其他的更有意义。你能在同一个<a></a>中同时使用多个asp-route-{parameter name}吗? 这帮助了我的问题,因为它没有正确地绑定,试图将外键CompanyId作为Id发送回来,而是将其放置在Order主键Id中。 - Edward
1
可以的。根据http://www.davepaquette.com/archive/2015/06/01/mvc-6-anchor-tag-helper.aspx,您可以使用具有*asp-route-*前缀的属性为尽可能多的参数指定值。我认为您不能使用相同名称的两个参数 - 这里有一个功能请求/问题 https://github.com/aspnet/Mvc/issues/4560 - Alex White
所以如果我理解正确,目前只有在操作助手方法中才能传递列表,而不能在锚标签助手中传递。 - Edward
1
我已经更新了我的答案,展示了在锚标签助手中传递两个参数。这样好吗? - Alex White
适用于我。我为分页实现了这个功能。 - NoloMokgosi
显示剩余2条评论

5
你可以使用以下代码传递自定义ID:
<a asp-controller="User" asp-action="Edit" asp-route-id="@item.ID">Edit</a>

1

我建议在Razor视图中使用@Html.actionlink的方式来使用模型值,就像在jsp中一样。

var URLvalue='@Html.ActionLink("UserString", "action", new { routeValueName1 = "__value1__", routeValueName2="__value2__" }, htmlAttributes: new { @class = "btn btn-default", @role = "button" })'
     .replace('__value1__', Model.somevalue).replace('__value2__',  Model.somevalue);

您可以在JSP或jQuery中随时使用URLvalue。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接