Trong ASP.NET MVC, bạn có phải nhận các tham số QueryString giống như cách bạn làm trong ASP.NET WebForms? hoặc [AcceptVerbs(HttpVerbs.Get)]
khai báo được sử dụng bằng cách nào đó?
Câu trả lời:
Tham số chuỗi truy vấn có thể được chấp nhận đơn giản bằng cách sử dụng một đối số trên hành động - tức là
public ActionResult Foo(string someValue, int someOtherValue) {...}
sẽ chấp nhận một truy vấn như .../someroute?someValue=abc&someOtherValue=123
Ngoài ra, bạn có thể xem trực tiếp yêu cầu để kiểm soát nhiều hơn.
Tôi nghĩ những gì bạn đang tìm kiếm là
Request.QueryString["QueryStringName"]
và bạn có thể truy cập nó trên các lượt xem bằng cách thêm @
bây giờ hãy xem ví dụ của tôi ,,, tôi đã tạo một Url bằng QueryString
var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})';
giá trị listURL là /Sector/List?name=value'
và khi queryString
nào trống
giá trị listURL là /Sector/List
Tôi khuyên bạn nên sử dụng thuộc tính ValueProvider của bộ điều khiển, giống như cách UpdateModel / TryUpdateModel làm để trích xuất các thông số tuyến đường, truy vấn và biểu mẫu được yêu cầu. Điều này sẽ giữ cho chữ ký phương pháp của bạn không có khả năng phát triển rất lớn và có thể thay đổi thường xuyên. Nó cũng giúp kiểm tra dễ dàng hơn một chút vì bạn có thể cung cấp ValueProvider cho bộ điều khiển trong quá trình kiểm tra đơn vị.
Trên thực tế, bạn có thể nắm bắt các chuỗi Truy vấn trong MVC theo hai cách .....
public ActionResult CrazyMVC(string knownQuerystring)
{
// This is the known query string captured by the Controller Action Method parameter above
string myKnownQuerystring = knownQuerystring;
// This is what I call the mysterious "unknown" query string
// It is not known because the Controller isn't capturing it
string myUnknownQuerystring = Request.QueryString["unknownQuerystring"];
return Content(myKnownQuerystring + " - " + myUnknownQuerystring);
}
Điều này sẽ nắm bắt cả hai chuỗi truy vấn ... ví dụ:
/CrazyMVC?knownQuerystring=123&unknownQuerystring=456
Output: 123 - 456
Đừng hỏi tôi tại sao họ thiết kế nó theo cách đó. Sẽ có ý nghĩa hơn nếu họ ném ra toàn bộ hệ thống hành động Bộ điều khiển cho các chuỗi truy vấn riêng lẻ và chỉ trả lại danh sách động đã thu thập của tất cả các chuỗi / đối tượng tệp được mã hóa cho URL bằng mã hóa url-form-encoding để bạn có thể dễ dàng truy cập tất cả chúng trong một lệnh gọi . Có lẽ ai đó ở đây có thể chứng minh điều đó nếu có thể?
Đối với tôi không có ý nghĩa gì đối với cách Bộ điều khiển nắm bắt các chuỗi truy vấn, nhưng điều đó có nghĩa là bạn có thể linh hoạt hơn để nắm bắt các chuỗi truy vấn hơn là những gì họ dạy cho bạn. Vì vậy, hãy chọn thuốc độc của bạn .... cả hai đều hoạt động tốt.