2011-01-24 9 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

DefaultModelBinder' ''対IModelBinder'を使用してのあなたの考えは何ですか? –

+1

@Josiah、私の考えは、 'DefaultModelBinder'では心配するケースが少なくなります(デフォルトのケース)。 IModelBinderを使用している場合、値がTrueまたはFalseの場合も処理する必要があります。この場合は既定のモデルバインダーで既に処理されているため、DRYerです。 –

+0

「BBinder」を使用したいと明示的に宣言しなければならないのですか、それともデフォルトの一部として起こるのでしょうか? – jocull

2

this linkをチェックしてください。それは明らかにMVC2で動作します。あなたが(未テスト)のような何かを行うことができ

:アプリケーションにGlobal.asaxの中で次に

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

追加開始:

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

答えをありがとう。私がデフォルトのケースを無視したい、あるいは再定義したいのであれば、これは私が使った解決策です。 – jocull

関連する問題