如何在ASP.NET Core MVC中为ASP标签助手添加链接参数

168

我有丰富的 ASP.NET MVC 1-5 经验,现在我学习 ASP.NET Core MVC 并需要在页面上传递参数链接。例如我有以下的Action

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

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

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>
4个回答

309
你可以使用属性前缀asp-route-来为你的路由变量命名加前缀。
例如:
<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>

2
如果我有多个参数,我必须使用这种方法添加所有内容吗? - Elvin Mammadov
53
@elvin-mammadov,是的,使用asp-route-yourParamName,例如:asp-route-foo="bar" - Alex
4
@nam,你可以在 ASP 辅助器旁边添加一个数据属性。 <a asp-route-id="@item.Id" data-id="@item.Id" /> 然后使用 $('a').attr('data-id') 获取 id :) - Steen Schütt
1
如果我想以编程方式添加5个查询参数怎么办? - Anestis Kivranoglou
1
哇,我花了整个上午才搞明白,这份文档不像应该那样详细...和往常一样,文档缺乏例子。 - Moff452
显示剩余2条评论

41

你可能想要使用以下语法。

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

这将产生类似以下的调用路由。

/Member/Edit/3/full/12

然后您可以按照下面所示的方法接收它。

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

虽然在MVC中,方法上的属性装饰器并不是必需的,但它更清晰地展示了如何将链接中的属性绑定到方法传入的参数中。


1
对于我而言,它生成了/Member/Edit/3?type=full&id=12,而不是/Member/Edit/3/full/12 - Arif
1
@Arif 不能确定为什么,而且我现在也不在C#环境中(懒得启动一个)。然而,我建议这取决于我们是否明确声明 [FromUrl][FromQuery] 等,这可能因.NET平台的不同版本而异,或者依赖于纯WebAPI调用的继承类(与BaseController类不同,后者包含视图和所有内容)。只是猜测,注意。 - Konrad Viltersten

9
如果你想将变量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>

1
你能解释一下你的答案吗?仅有代码而没有解释的答案往往会被投票降低或删除。 - S.S. Anne

0
在后端:
这段代码必须写在控制器中的顶部动作。
[Route("/Controller/Method/{Object or varible name}")]
public actionresult method name(your variable)
{
    //your code...
}

在前端方面:

@{
var url = "/Controller/Method/" + your data;
<a href="@url"> click me for send data()</a>
}

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