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

У меня большой опыт работы с 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>

person Elvin Mammadov    schedule 27.06.2016    source источник


Ответы (4)


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

Пример:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
person Alex    schedule 27.06.2016
comment
Если у меня несколько параметров, я должен добавить все с помощью этого метода? - person Elvin Mammadov; 27.06.2016
comment
@ elvin-mammadov, да, используя asp-route-yourParamName, например: asp-route-foo="bar" - person Alex; 27.06.2016
comment
@ElvinMammadov Ваш комментарий asp-route-yourParamName о дополнительных входных параметрах был очень полезен. Спасибо. - person nam; 18.07.2016
comment
@Alex В вашем примере будет создан html как: <a href="/Product/GetProduct/10">ProductName</a>. Вопрос: при использовании помощника тега привязки, как мы можем получить значение параметра (например, 10) с помощью jquery? ` - person nam; 03.02.2017
comment
@nam только путем разделения строки href, я думаю - person Alex; 07.02.2017
comment
@nam Вы можете добавить атрибут данных рядом с помощником ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />, а затем получить идентификатор с помощью $('a').attr('data-id') :) - person Steen Schütt; 15.05.2017
comment
что, если я хочу программно добавить 5 параметров запроса ?? - person Anestis Kivranoglou; 18.11.2017
comment
Уау, у меня ушло все утро, чтобы понять это, это не так хорошо документировано, как должно быть, имо .. Как обычно, в документации не хватает примеров - person Moff452; 23.02.2021

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

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

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

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

[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>
person Neeraj Singh Chouhan    schedule 02.01.2020
comment
Вы можете объяснить свой ответ? Ответы только на код без объяснения, как правило, отклоняются или удаляются. - person S.S. Anne; 03.01.2020

На бэкэнде:

Этот код должен быть записан в начале действия в контроллере.

[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>
}
person saeid    schedule 07.05.2021