Kết quả của những kỹ thuật đó sẽ giống nhau vì vậy, phần lớn là vấn đề mà nhóm cảm thấy thoải mái hơn. Vì vậy, bạn có thể đưa ra một quy ước như quy ước mà bạn đã nêu.
Cá nhân, tôi không muốn đặt thuộc tính trên mọi phương thức hành động sử dụng mô hình đó. Vì vậy, tôi sẽ chọn một trong các tùy chọn sau:
Đặt thuộc tính trên lớp mô hình như:
[ModelBinder(typeof(MyModelBinder))]
public class MyModel
{
...
}
toàn cầu đăng ký chất kết dính
ModelBinders.Binders.Add(typeof(MyModel), new MyModelBinder())
Một lý do khác tại sao tôi thích một trong số đó là vì nếu bạn phải kích hoạt thủ công quá trình ràng buộc mô hình, bạn cũng có thể muốn ur mô hình tùy chỉnh chất kết dính được sử dụng:
public ActionResult SomeActionMethod()
{
MyModel model = ...
//manually invoke the model binding process considering only query string data
//The custom model binder will be used only if it was globally registered
//in the binders dictionary or set in an attribute of the model class
TryUpdateModel(model, new QueryStringValueProvider())
...
}
Bạn cũng có tùy chọn để thực hiện logic riêng của bạn để lựa chọn chất kết dính mô hình bằng cách thực hiện các giao diện IModelBinderProvider
và đăng ký trong global.asax như trong
ModelBinderProviders.BinderProviders.Add(new CustomModelBinderProvider())
Một cách để sử dụng thuộc tính trong các tham số của phương thức có thể được ghi đè đối với phương thức cụ thể mà trình mô hình hóa mà nếu không sẽ được sử dụng. Vì vậy, bạn có thể đăng ký một mô hình trên toàn cầu cho lớp của bạn và ghi đè nó trong một phương thức hành động cụ thể bằng cách sử dụng thuộc tính.
Cuối cùng, có một số tùy chọn để chọn trình kết nối mô hình. Trong asp MVC 3 này sẽ được giải quyết theo cách sau (giả sử bạn đang sử dụng mặc định ControllerActionInvoker)
Thuộc tính trên các tham số của hành động.Xem phương thức GetParameterValue của ControllerActionInvoker class
Binder được trả về từ IModelBinderProvider. Xem phương pháp GetBinder trong ModelBinderDictionary class
Binder được đăng ký toàn cầu trong từ điển ModelBinders.Binders.
Chất kết dính được xác định trong thuộc tính [ModelBinder()]
cho loại mô hình.
DefaultModelBinder.
Nguồn
2012-12-06 17:27:08
Bạn có thể đặt DefaultModelBinder - tiện dụng để gỡ lỗi 'ModelBinders.Binders.DefaultBinder = new TestBinder();' – Todd