2011-01-24 65 views

回答

9

的東西應該做的工作:

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); 
    } 
} 

Application_Start註冊:

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

什麼是使用`IModelBinder` VS`DefaultModelBinder`您的想法? – 2011-01-24 20:21:43

+1

@Josiah,我的想法是,`DefaultModelBinder`我有一個小問題擔心(默認情況下)。如果我使用IModelBinder,我還必須處理值等於True或False的情況,並且此情況已由默認模型聯編程序處理,因此它是DRYer。 – 2011-01-24 20:23:43

2

退房this link。它顯然在MVC2中有效。

你可以這樣做(未經測試):

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; 
    } 
} 
在應用程序在Global.asax

然後開始添加:

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