モデルバインダーが "1"と "0"をそれぞれtrue
とfalse
と認識しないことがASP.NET MVC 2に気付きました。モデルバインダーをグローバルに拡張してを認識し、適切なブール値にすることはできますか?ASP.NET MVC 2モデルバインダーを0,1ブール値に拡張する
ありがとうございます!
モデルバインダーが "1"と "0"をそれぞれtrue
とfalse
と認識しないことがASP.NET MVC 2に気付きました。モデルバインダーをグローバルに拡張してを認識し、適切なブール値にすることはできますか?ASP.NET MVC 2モデルバインダーを0,1ブール値に拡張する
ありがとうございます!
ラインの間で何かが仕事をする必要があります。
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());
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());
答えをありがとう。私がデフォルトのケースを無視したい、あるいは再定義したいのであれば、これは私が使った解決策です。 – jocull
DefaultModelBinder' ''対IModelBinder'を使用してのあなたの考えは何ですか? –
@Josiah、私の考えは、 'DefaultModelBinder'では心配するケースが少なくなります(デフォルトのケース)。 IModelBinderを使用している場合、値がTrueまたはFalseの場合も処理する必要があります。この場合は既定のモデルバインダーで既に処理されているため、DRYerです。 –
「BBinder」を使用したいと明示的に宣言しなければならないのですか、それともデフォルトの一部として起こるのでしょうか? – jocull