2011-01-24 18 views

Trả lời

9

Something thuộc ngành, nghề phải thực hiện công việc:

public class BBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     if (value != null) 
     { 
      if (value.AttemptedValue == "1") 
      { 
       return true; 
      } 
      else if (value.AttemptedValue == "0") 
      { 
       return false; 
      } 
     } 
     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

và đăng ký ở Application_Start:

ModelBinders.Binders.Add(typeof(bool), new BBinder()); 
+1

suy nghĩ của bạn là gì trên sử dụng 'IModelBinder' vs 'DefaultModelBinder' ? –

+1

@Josiah, suy nghĩ của tôi là với 'DefaultModelBinder' Tôi có một ít trường hợp phải lo lắng (trường hợp mặc định). Nếu tôi sử dụng IModelBinder, tôi cũng sẽ phải xử lý trường hợp giá trị bằng True hoặc False và trường hợp này đã được xử lý bởi trình kết nối mô hình mặc định, vì vậy nó là DRYer. –

+0

Tôi có phải tuyên bố rõ ràng rằng tôi muốn sử dụng 'BBinder' hoặc nó sẽ xảy ra như một phần của Default? – jocull

2

Check-out this link. Nó dường như hoạt động trong MVC2.

Bạn có thể làm điều gì đó tương tự (chưa được kiểm tra):

public class BooleanModelBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { 
     ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     // do checks here to parse boolean 
     return (bool)value.AttemptedValue; 
    } 
} 

Sau đó, trong global.asax trên ứng dụng bắt đầu thêm:

ModelBinders.Binders.Add(typeof(bool), new BooleanModelBinder()); 
+0

Cảm ơn câu trả lời. Nếu tôi muốn bỏ qua hoặc xác định lại các trường hợp mặc định, đây sẽ là giải pháp tôi đã sử dụng. – jocull

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