TagHelper 用于将路由值作为链接的一部分传递

Posted

技术标签:

【中文标题】TagHelper 用于将路由值作为链接的一部分传递【英文标题】:TagHelper for passing route values as part of a link 【发布时间】:2015-05-04 00:14:12 【问题描述】:

在链接上指定asp-controllerasp-action 时,同时传递id 属性的语法是什么?

例如如果我想链接到给定对象的编辑 URL,则所需的 URL 将是 /user/edit/5 例如。

有没有使用 TagHelpers 的方法来实现这一点,还是我们仍然必须退回到@html.ActionLink()

【问题讨论】:

【参考方案1】:

您可以使用属性前缀asp-route- 为您的路由变量名称添加前缀。

示例:<a asp-action="Edit" asp-route-id="10" asp-route-foo="bar">Edit</a>

【讨论】:

我无法让它工作,因为我的“asp-route-foobar”与我的路线不匹配:“routes.MapRoute("yearNoCombo", template:"controller=Home /action=Index/foobar?/whatever1/whatever2"); - 路由名称必须匹配。HTH 其他。 除了上述注释之外,您还需要确保您的路由设置正确,以避免路由位在 HTML 中作为参数出现在您的方法上使用 MapRoute 或路由注释【参考方案2】:

我想建议将其他两个答案结合起来,但需要做一些额外的说明。

您将使用属性前缀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>

【讨论】:

这对我来说绝对比其他人更有意义。您还可以在同一个 中有多个 asp-route-parameter name 吗?这有助于解决我的问题没有正确绑定尝试发送外键 CompanyId,因为它正在使用 Id 并将其放置在 Order 主键 Id 中。 是的,你可以。根据davepaquette.com/archive/2015/06/01/…,您可以使用带有 asp-route- 前缀的属性为任意数量的参数指定值。我不认为你可以有两个同名的参数 - 这里有一个功能请求/问题github.com/aspnet/Mvc/issues/4560 所以如果我没看错的话,目前有一种方法可以只在动作助手方法中传递列表,而不是在锚标签助手中。 我已更新我的答案以显示在锚标记助手中传递两个参数。这样更好吗? 真的不需要。当我向question 寻求有关传回列表的答案时,我当然不知道您的链接中使用的术语。【参考方案3】:

您可以使用以下代码传递自定义 ID:

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

【讨论】:

【参考方案4】:

我建议 Razor 视图使用 jsp 中的 @Html.actionlink 使用模型值的另一种方法

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。

【讨论】:

以上是关于TagHelper 用于将路由值作为链接的一部分传递的主要内容,如果未能解决你的问题,请参考以下文章

如何将 vue.js 值作为参数传递给刀片中的路由

Asp.Net Core 入门—— Taghelper

将 DateTime 值作为参数传递给 OleDbCommand

如何将 JSON 返回数据作为参数传递给 URL 路由(laravel)

[十一] ASP.NET Core 中的 Taghelper

PL/SQL:将字符串的“数组”作为参数传递给 sql