我希望我的模型绑定不区分大小写。
我尝试操作继承自System.web.Mvc.DefaultModelBinder
的自定义模型绑定器,但我无法弄清楚在何处添加不区分大小写。
我还看了一下IValueProvider
,但我不想重新发明轮子并自己找到价值观。
有什么想法吗?
答案 0 :(得分:4)
拥有CustomModelBinder
是解决方案。因为我不需要完全不区分大小写,所以我只检查是否找到了我的属性的小写版本。
public class CustomModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor,
object value)
{
//only needed if the case was different, in which case value == null
if (value == null)
{
// this does not completely solve the problem,
// but was sufficient in my case
value = bindingContext.ValueProvider.GetValue(
bindingContext.ModelName + propertyDescriptor.Name.ToLower());
var vpr = value as ValueProviderResult;
if (vpr != null)
{
value = vpr.ConvertTo(propertyDescriptor.PropertyType);
}
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}