扩展ASP.NET MVC 2 Model Binder以适用于0,1个布尔值

时间:2011-01-24 20:06:23

标签: c# asp.net-mvc-2

我注意到ASP.NET MVC 2模型绑定器不会分别将“1”和“0”识别为truefalse。是否可以扩展模型绑定器全局以识别这些并将它们转换为适当的布尔值?

谢谢!

2 个答案:

答案 0 :(得分: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 :(得分: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());