Как добавить параметр ссылки в помощники тегов asp в ASP.NET Core MVC

105

У меня большой опыт работы с 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>
Эльвин Мамедов
источник

Ответы:

196

Вы можете использовать префикс атрибута asp-route-для префикса имен переменных маршрута.

Пример:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
Alex
источник
2
Если у меня несколько параметров, я должен добавить все с помощью этого метода?
Эльвин Мамедов
40
@ elvin-mammadov, да, используя asp-route-yourParamName, например:asp-route-foo="bar"
Alex
2
@ElvinMammadov Ваш комментарий asp-route-yourParamNameотносительно дополнительных входных параметров был очень полезен. Спасибо.
nam
@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" />а затем получить идентификатор с помощью $('a').attr('data-id'):)
Steen Schütt
18

Вы можете применить следующий синтаксис.

<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, он более четко показывает, как привязать атрибуты из ссылки к переданным параметрам в методе.

Конрад Вильтерстен
источник
У меня вместо /Member/Edit/3/full/12этого генерирует/Member/Edit/3?type=full&id=12
Ариф
1
@Arif Не могу сказать наверняка, почему, и я сейчас не в среде C # (слишком ленив, чтобы запускать ее). Однако я бы предположил, что это зависит от того, указываем ли мы явно [FromUrl] или [FromQuery] и т. Д., Которые могут отличаться в разных версиях платформы .NET и / или зависеть от наследования классов для чистых вызовов WebAPI (как в отличие от классов для BaseController с представлениями и всем остальным ). Просто предположение, NB.
Конрад Вильтерстен
0

если вы хотите поместить идентификатор переменной в ссылку в сетке или таблице, можно использовать что-то ниже кода

[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 Anne