Cách thêm tham số liên kết vào trình trợ giúp thẻ asp trong ASP.NET Core MVC


104

Tôi có nhiều kinh nghiệm với ASP.NET MVC 1-5 . Bây giờ tôi học ASP.NET Core MVC và phải truyền một tham số để liên kết trong trang. Ví dụ, tôi có Hành động sau

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

Làm cách nào để triển khai liên kết cho hành động này bằng cách sử dụng trình trợ giúp thẻ?

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>

Câu trả lời:


195

Bạn có thể sử dụng tiền tố thuộc tính asp-route-để đặt tiền tố cho tên biến tuyến đường của mình.

Thí dụ:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>

2
Nếu tôi có nhiều tham số, tôi phải thêm mọi thứ bằng phương thức này?
Elvin Mammadov

40
@ Elvin-mammadov, yup, sử dụng asp-route-yourParamName, ví dụ:asp-route-foo="bar"
Alex

2
@ElvinMammadov Nhận xét của bạn asp-route-yourParamNamevề các thông số đầu vào bổ sung rất hữu ích. Cảm ơn.
nam

@ Alex ví dụ của bạn sẽ tạo ra html như: <a href="https://stackoverflow.com/Product/GetProduct/10">ProductName</a>. Câu hỏi : Trong khi sử dụng trình trợ giúp thẻ liên kết, chúng ta có thể lấy giá trị tham số (ví dụ: 10) bằng cách jquerynào? '
nam

3
@nam Bạn có thể thêm thuộc tính dữ liệu bên cạnh trình trợ giúp ASP. <a asp-route-id="@item.Id" data-id="@item.Id" />và sau đó lấy id với $('a').attr('data-id'):)
Steen Schütt

18

Bạn có thể muốn áp dụng cú pháp sau.

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

Điều đó sẽ tạo ra đường gọi như thế này.

/ Member / Edit / 3 / full / 12

Sau đó, bạn có thể nhận nó trong phương thức như hình dưới đây.

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

Mặc dù, thuộc tính trang trí phương thức không bắt buộc trong MVC, nhưng nó cho thấy rõ ràng hơn cách liên kết các thuộc tính từ liên kết đến các tham số được truyền trong phương thức.


Đối với tôi thay vì /Member/Edit/3/full/12nó tạo ra/Member/Edit/3?type=full&id=12
Arif

1
@Arif Không thể nói chắc chắn lý do tại sao và tôi không ở trong môi trường C # vào lúc này (quá lười để khởi động một môi trường). Tuy nhiên, tôi đề nghị rằng điều đó phụ thuộc vào việc chúng tôi đang nói rõ [FromUrl] hoặc [FromQuery] , v.v., có thể khác nhau giữa các phiên bản khác nhau của biểu mẫu .NET và / hoặc phụ thuộc vào việc kế thừa các lớp cho các lệnh gọi WebAPI thuần túy (như đối lập với các lớp dành cho BaseController với các khung nhìn và tất cả những thứ đó). Chỉ là xác nhận thôi, NB.
Konrad Viltersten

0

nếu bạn muốn đặt id biến vào liên kết trong lưới hoặc bảng thì có thể sử dụng mã bên dưới

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

Bạn có thể giải thích câu trả lời của bạn? Các câu trả lời chỉ có mã mà không có lời giải thích có xu hướng bị phản đối hoặc bị loại bỏ.
SS Anne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.