2012-04-04 30 views
12

Tôi tự hỏi liệu có cách nào để sử dụng mô hình gắn liền được xây dựng tương tự như ràng buộc mô hình nội bộ xảy ra trước một hành động điều khiển.Mô hình thủ công ràng buộc với .Net Mvc

Vấn đề của tôi là tôi muốn có thể kiểm soát sự ràng buộc vì tôi sẽ không biết loại đối tượng cần ràng buộc cho đến khi tôi thực sự ở trong bối cảnh hành động của bộ điều khiển.

Tôi hiểu tôi có thể kế thừa DefaultModelBinder để thực hiện tùy chỉnh ràng buộc, nhưng tôi hài lòng với những gì đã được cung cấp và chỉ muốn sử dụng nó - lấy ví dụ lý tưởng này để biết ý tưởng của tôi :

public ActionResult DoCustomBinding(string modelType) 
{ 
    ... // logic to determine type to check and create strong 'actual' type 

    object model = BindModel(actualType); 

    ... // do something with bound model 

    return View(); 
} 

tôi đã nhìn vào cách sử dụng DefaultModelProvider nhưng không chắc chắn nếu điều này là đúng cách đi về việc này và tôi đã không chắc chắn làm thế nào để có được ModelBindingContext.

+0

Bạn nói đúng. Đó là hành vi nghèo nàn trên một trang web hữu ích như vậy, tôi đã cho bản thân mình một đánh dấu triệt để. –

+0

Tôi sẽ cố gắng và cụ thể hơn, mục tiêu cuối cùng của tôi là có thể xác thực một thuộc tính duy nhất của một lớp được trang trí với các thuộc tính xác thực. Vì vậy, được trang bị chỉ một tên chuỗi của loại để kiểm tra, tên trường và (các) giá trị - tôi muốn có thể ràng buộc mô hình (mà tôi sẽ cần phải làm việc ra khỏi loại) sau đó thực hiện kiểm tra trên đó. –

+0

Tôi sẽ xem xét phần ActionActionInvoker http://aspnet.codeplex.com/SourceControl/changeset/view/72551#266452 có vẻ như nó có thể cho tôi một ý tưởng về cách thực hiện nội bộ của nó. –

Trả lời

0

Bạn đã xem giao diện IModelBinder chưa?

public class CustomModelsBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { } 
} 

Và sau đó thêm video này vào tập tin global.asax của bạn:

protected override void OnApplicationStarted() { 
    ModelBinders.Binders.Add(typeof(CustomModels), new CustomModelsBinder()); 
} 
+0

Không hoàn toàn, và tôi đã sử dụng một cái gì đó tương tự như làm việc với enums. Tôi muốn sử dụng công cụ nội bộ và loại nói, đây là loại tôi muốn tạo và liên kết với, đi tạo và liên kết với nó và mang lại kết quả (bên ngoài thường trình của một hành động điều khiển). –

0

Nếu bạn muốn xác nhận chỉ các phần cụ thể của một người mẫu, điều này có thể là bản sao của một câu hỏi trước đây tôi đã trả lời MVC Partial Model Updates.

Phần thú vị khi sử dụng System.ComponentModel.DataAnnotations.MetadataType là trình kết nối mô hình sẽ giữ liên kết với đối tượng dẫn xuất về cơ bản giống với đối tượng cơ sở, chỉ với siêu dữ liệu hiển thị/xác thực khác nhau.

+0

Cảm ơn - điều này có vẻ hữu ích, tôi đã chỉ quản lý để có được sự ràng buộc làm việc vì vậy tôi đã có một vài giải pháp tôi có thể nhìn vào bây giờ ... –

9

Nếu bất cứ ai đi qua câu hỏi này từ google như tôi đã làm ở đây là câu trả lời: How to gain control over model binding?

Nói tóm lại: TryUpdateModel là phương pháp bạn đang tìm kiếm.

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