16

Tôi đang cố gắng tìm một số ví dụ về xây dựng một mô hình tùy chỉnh cho một kịch bản ràng buộc duy nhất mà tôi cần xử lý, nhưng tất cả các bài viết tôi tìm thấy đều là các phiên bản cũ của MVC không còn liên quan trong MVC2 nữa. Tôi đã tham khảo mã nguồn DefaultModelBinder để cố gắng để có được một cảm giác chung cho những gì tôi cần làm, nhưng nó hoàn toàn phức tạp hơn kịch bản của tôi và tôi gặp khó khăn khi cô lập logic cụ thể mà tôi cần phải thực hiện.ASP.NET MVC2 - Ví dụ mẫu Binder tùy chỉnh

Mục tiêu của tôi là lấy một bộ sưu tập các cặp hộp kiểm/hộp văn bản và cho tất cả các cặp được kiểm tra tôi muốn tạo cặp khóa/giá trị của giá trị của hộp kiểm và giá trị của hộp văn bản có liên quan. Sau khi tổng hợp dữ liệu này, tôi cần thực hiện một số chuỗi tuần tự hóa trên bộ sưu tập để tôi có thể lưu trữ nó trong một thuộc tính chuỗi của kiểu Mô hình mong muốn. Tôi đã gửi dữ liệu từ biểu mẫu ở định dạng có thể quản lý, cho phép tôi liên kết một Hộp kiểm cụ thể với một Hộp văn bản cụ thể, đó chỉ là vấn đề tìm cách lấy tất cả các phần mà tôi cần chúng.

Có ai biết về một số hướng dẫn cập nhật có thể giúp tôi bắt đầu xây dựng một bộ mô hình tùy chỉnh không?

Trả lời

12

Tôi không biết tại sao bạn cho rằng nhiều thay đổi kể từ MVC 1 liên quan đến chất kết dính mô hình tùy chỉnh. Nhưng nếu tôi hiểu những gì bạn đang cố gắng làm, nó sẽ khá dễ dàng.

public class CustomModelBinder : DefaultModelBinder { 
    public override object BindModel(ControllerContext controllerContext, 
     ModelBindingContext bindingContext) { 

     NameValueCollection form = controllerContext.HttpContext.Request.Form; 
     //get what you need from the form collection 

     //creata your model 
     SomeModel myModel = new SomeMode(); 
     myModel.Property = "value"; 
     //or add some model errors if you need to 
     ModelStateDictionary mState = bindingContext.ModelState; 
     mState.Add("Property", new ModelState { }); 
     mState.AddModelError("Property", "There's an error."); 

     return myModel; //return your model 
    } 
} 

Và hành động của bạn:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){ 
    //... 
} 

Đó có phải là loại thông tin bạn đang tìm kiếm?

+2

Kỹ thuật này hoàn toàn phù hợp với tôi, nhưng tôi đã ấn tượng rằng tôi nên tận dụng 'bindingContext.ValueProvider' thay vì truy cập trực tiếp HttpContext (vì lý do testability). –

+0

@Nathan Taylor, tôi hiểu rồi. Trong trường hợp đó, kỹ thuật được mô tả ở đây có thể giúp bạn bắt đầu. http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx S. Hanselman cũng cung cấp một ví dụ ở đây về cách kiểm tra chất kết dính: http://stackoverflow.com/questions/253574/how-to-test-custom -model-binders-in-asp-net-mvc/589250 # 589250 –

+0

Ngoài ra, nếu bạn đang tìm kiếm mô hình ràng buộc dựa trên loại cụ thể (hoặc chung), hãy kiểm tra bài đăng tại đây: http://stackoverflow.com/câu hỏi/1487005/asp-net-mvc-model-binder-for-generic-type –

1

Hãy xem một số ví dụ về Custom MVC Model binders trên blog của tôi.

+1

Trang web không hoạt động và các ví dụ phải được đăng ở đây - không phải là trang web bên ngoài. –

Các vấn đề liên quan