如何在ASP.NET Core MVC中将链接参数添加到ASP标记助手


104

我对ASP.NET MVC 1-5有很多经验。现在,我学习ASP.NET Core MVC,并且必须传递参数以链接到页面中。例如我有以下操作

 [HttpGet]
 public ActionResult GetProduct(string id)
 {
      ViewBag.CaseId = id;
      return View();
 }

如何使用标签助手来实现此操作的链接?

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>

Answers:


195

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

例:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>

2
如果我有多个参数,是否必须使用此方法添加所有内容?
Elvin Mammadov

40
@ elvin-mammadov,是的,使用asp-route-yourParamName,例如:asp-route-foo="bar"
Alex

2
@ElvinMammadov您asp-route-yourParamName对其他输入参数的评论非常有帮助。谢谢。
2016年

@Alex您的示例将生成html为:<a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>问题:在使用锚标记帮助器时,如何使用来获取参数值(例如10)jquery?`
nam

3
@nam可以在ASP帮助器旁边添加一个数据属性。<a asp-route-id="@item.Id" data-id="@item.Id" />然后使用以下代码获取ID $('a').attr('data-id'):)
SteenSchütt17年

18

您可能要应用以下语法。

<a asp-controller="Member"
   asp-action="Edit"
   asp-route-level="3"
   asp-route-type="full"
   asp-route-id="12">Click me</a>

这样将产生呼叫路由。

/会员/编辑/ 3 /完整/ 12

然后,您可以通过如下所示的方法接收它。

[Route({level}/{type}/{id})]
public IActionResult Edit(int level, string type, int id) { ... }

尽管在MVC中不需要修饰该方法的属性,但是它更清楚地显示了如何将链接中的属性绑定到方法中传递的参数。


对我而言而不是/Member/Edit/3/full/12它产生/Member/Edit/3?type=full&id=12
Arif

1
@Arif不能肯定地说为什么,我现在不在C#环境中(太懒了,无法启动一个)。但是,我建议这取决于我们是否明确声明[FromUrl][FromQuery]等。在不同版本的.NET平台之间,它们可能有所不同,并且/或者取决于纯WebAPI调用的继承类(如与带有视图等的BaseController类相对)。注意,NB。
Konrad Viltersten

0

如果要将变量id放入网格或表的链接中,可以使用以下代码

[HttpGet]
[Route("/Product/GetProduct/{id}")]
 public ActionResult GetProduct(string id)
 {
      ViewBag.CaseId = id;
      return View();
 }


 <a  asp-controller="Product" asp-action="GetProduct" asp-route-id="@item.id" >ProductName</a>

你能解释你的答案吗?没有解释的纯代码答案往往会被低估或删除。
SS安妮
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.