Tôi đã tạo ra một mô hình MVC tùy chỉnh Binder được gọi cho mỗi HttpPost
mà đi vào máy chủ. Nhưng không được gọi cho các yêu cầu HttpGet
.Tùy chỉnh mô hình Binder cho ASP.NET MVC trên yêu cầu GET
- Nếu mô hình tùy chỉnh của tôi có được gọi trong một số
GET
? Nếu vậy, tôi đã bỏ lỡ những gì? - Nếu không, Làm cách nào để viết mã tùy chỉnh xử lý
QueryString
từ yêu cầuGET
?
Dưới đây là thực hiện của tôi ...
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// This only gets called for POST requests. But I need this code for GET requests.
}
}
Global.asax
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
//...
}
Tôi đã nhìn vào các giải pháp này, nhưng họ không hoàn toàn công việc cho những gì tôi tìm kiếm:
- Loại phức tạp hiện có qua
TempData
- Sử dụng chất kết dính mặc định để xây dựng các loại phức tạp (
?Name=John&Surname=Doe
)
Ghi chú về câu trả lời
Nhờ @Felipe cho sự giúp đỡ. Chỉ trong trường hợp ai đó đấu tranh với nhau, tôi đã học:
- Mô hình tùy chỉnh chất kết dính THỂ được sử dụng cho
GET
yêu cầu - Bạn CAN sử dụng
DefaultModelBinder
lớp - trở ngại của tôi là hành động phương pháp PHẢI có thông số (nếu không, trình kết nối mô hình bị bỏ qua cho
GET
Yêu cầu, có ý nghĩa khi bạn nghĩ về nó)
bạn có thể sử dụng [OnActionExecuting] (https://msdn.microsoft .com/en-us/library/dd493080% 28v = vs.98% 29.aspx) để lọc từng yêu cầu và trong phương thức đó bạn có thể nhận chuỗi truy vấn bằng cách sử dụng 'Yêu cầu'. –
@JSantosh, hãy nói rằng tôi đã làm điều đó và đã giữ của tôi 'QueryString' trong' OnActionExecuting'. Tôi sẽ không thể dịch QueryString thành đối tượng và chuyển nó thành tham số cho phương thức hành động đúng không? Mà lá tôi với tình trạng khó khăn tương tự. –
Trong bài yêu cầu bạn nhận được dữ liệu như là đối tượng được tự động phân tích thành mô hình tương ứng, nhưng trong việc giúp bạn có được dữ liệu như chuỗi, tôi không chắc chắn rằng bạn có thể đạt được điều này. và câu hỏi tốt :) –