Jak dodać parametr linku do pomocników tagów asp w ASP.NET Core MVC

104

Mam duże doświadczenie z ASP.NET MVC 1-5 . Teraz uczę się ASP.NET Core MVC i muszę przekazać parametr do łącza na stronie. Na przykład mam następującą akcję

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

Jak mogę zaimplementować link do tej akcji za pomocą pomocników tagów?

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>
Elvin Mammadov
źródło

Odpowiedzi:

195

Możesz użyć przedrostka atrybutu, asp-route-aby poprzedzić nazwy zmiennych trasy.

Przykład:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
Alex
źródło
2
Jeśli mam wiele parametrów, muszę dodać wszystko tą metodą?
Elvin Mammadov
40
@ elvin-mammadov, yup, używając asp-route-yourParamNamena przykład:asp-route-foo="bar"
Alex
2
@ElvinMammadov Twój komentarz asp-route-yourParamNamedotyczący dodatkowych parametrów wejściowych był bardzo pomocny. Dzięki.
nam
@Alex swoim przykładzie będzie generować html jak: <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Pytanie : Podczas korzystania z pomocnika tagu kotwicy, w jaki sposób możemy uzyskać wartość parametru (np. 10) za pomocą jquery? `
nam
3
@nam Możesz dodać atrybut danych obok pomocnika ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />a potem zdobądź identyfikator z $('a').attr('data-id'):)
Steen Schütt
18

Możesz chcieć zastosować następującą składnię.

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

Spowoduje to utworzenie takiej trasy połączenia.

/ Member / Edit / 3 / full / 12

Następnie możesz otrzymać go w sposób pokazany poniżej.

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

Chociaż atrybut dekorujący metodę nie jest wymagany w MVC, wyraźnie pokazuje, jak powiązać atrybuty z linku z parametrami przekazanymi w metodzie.

Konrad Viltersten
źródło
U mnie zamiast /Member/Edit/3/full/12tego generuje/Member/Edit/3?type=full&id=12
Arif
1
@Arif Nie mogę powiedzieć na pewno, dlaczego i nie jestem w tej chwili w środowisku C # (zbyt leniwy, aby też je uruchomić). Sugerowałbym jednak, że zależy to od tego, czy jawnie podajemy [FromUrl] lub [FromQuery] itp., Które mogą różnić się między różnymi wersjami platformy .NET i / lub zależeć od dziedziczenia klas dla czystych wywołań WebAPI (jak w przeciwieństwie do klas dla BaseController z widokami i tak dalej). Tylko gość, NB.
Konrad Viltersten
0

jeśli chcesz umieścić identyfikator zmiennej w linku w siatce lub tabeli, możesz użyć czegoś poniżej kodu

[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>
Neeraj Singh Chouhan
źródło
Czy możesz wyjaśnić swoją odpowiedź? Odpowiedzi zawierające tylko kod bez wyjaśnienia są zwykle odrzucane lub usuwane.
SS Anne