Tham số Url.Action?


116

Trong bộ điều khiển danh sách tôi có,

 public ActionResult GetByList(string name, string contact)
 {        
     var NameCollection = Service.GetByName(name);    
     var ContactCollection = Service.GetByContact(contact);           
     return View(new ListViewModel(NameCollection ,ContactCollection));
 }

Trong trang ASPX tôi gọi,

 <a href="<%:Url.Action("GetByList","Listing" , new {name= "John"} , new {contact="calgary, vancouver"})%>"><span>People</span></a>

Tôi gặp sự cố trong mã ASPX ... Tôi có thể kéo các bản ghi cho tên john. nhưng khi tôi đưa ra contact="calgary, vancouver", trang web bị lỗi.

Làm thế nào tôi có thể gọi hai tham số trong Url.Action. Tôi đã thử những điều dưới đây nhưng điều đó có vẻ sai.

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a>

Câu trả lời:


207

Sau đây là quá tải chính xác (trong ví dụ của bạn, bạn đang thiếu một đóng }đối với routeValuesđối tượng ẩn danh, vì vậy mã của bạn sẽ ném ra một ngoại lệ):

<a href="<%: Url.Action("GetByList", "Listing", new { name = "John", contact = "calgary, vancouver" }) %>">
    <span>People</span>
</a>

Giả sử bạn đang sử dụng các tuyến mặc định, điều này sẽ tạo ra đánh dấu sau:

<a href="/Listing/GetByList?name=John&amp;contact=calgary%2C%20vancouver">
    <span>People</span>
</a>

sẽ gọi thành công GetByListhành động bộ điều khiển truyền hai tham số:

public ActionResult GetByList(string name, string contact) 
{
    ...
}

@ user787788, bạn đang gặp sự cố gì vậy? Ý bạn là gì không chấp nhận hai tham số ? Ai không chấp nhận? Bạn nhận được một thông báo lỗi? Bộ điều khiển của bạn không hoạt động? Bạn đang nhận sai giá trị? Hãy cụ thể.
Darin Dimitrov

Khi tôi đưa ra hai tham số, trang aspx thậm chí không chạm vào bộ điều khiển. nó tự tìm ra lỗi trong trang. tôi có một ngoại lệ defalut được gọi là cái gì đó đã biến mất. aspx đi có
user787788

@ user787788, là lỗi gì vậy? Thông báo chính xác bạn đang nhận được?
Darin Dimitrov

lỗi là, bạn có thể đã nhập sai địa chỉ (URL).
user787788

2
@DarinDimitrov, tôi biết đây là một bài đăng rất cũ, nhưng tôi thấy bạn đang trực tuyến. Tôi không cho rằng bạn biết cách truyền động một tham số (không được mã hóa cứng như "John")?

8

Điều này hoạt động cho MVC 5:

<a href="@Url.Action("ActionName", "ControllerName", new { paramName1 = item.paramValue1, paramName2 = item.paramValue2 })" >
    Link text
</a>

4

bạn có thể trả về một bộ sưu tập riêng có tên HttpValueCollection ngay cả khi tài liệu nói rằng đó là một NameValueCollection bằng cách sử dụng tiện ích ParseQueryString. Sau đó thêm các khóa theo cách thủ công, HttpValueCollection sẽ thực hiện mã hóa cho bạn. Và sau đó chỉ cần nối QueryString theo cách thủ công:

var qs = HttpUtility.ParseQueryString(""); 
qs.Add("name", "John")
qs.Add("contact", "calgary");
qs.Add("contact", "vancouver")

<a href="<%: Url.Action("GetByList", "Listing")%>?<%:qs%>">
    <span>People</span>
</a>

0

Đây là một cách đơn giản khác để làm điều đó

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID'>Print</a>

Ở đâu @Model.IDlà một tham số

Và đây là một ví dụ thứ hai.

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID?param2=ViewBag.P2&param3=ViewBag.P3'>Print</a>
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.