Как добавить параметр ссылки в помощники тегов 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>

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.