因此,当非空整数字段未设置为值时,我使用 ASP.NET MVC RC1 并使用 DefaultModelBinder 的验证来显示验证错误。这是 MVC 默认完成的。但是,对于 string(varchar) 字段,情况并非如此,因为从视图中向绑定器传递了一个空字符串,这对于非空 varchar 列是完全有效的。
但是在实践中,当我将列标记为非空时,我几乎总是意味着我希望它不为空。所以我想出了这种将验证检查添加到默认活页夹的方法:
public class DefaultEntityBinder : DefaultModelBinder
{
protected override bool OnPropertyValidating(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
bool valid = base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor, value);
ColumnAttribute column = propertyDescriptor.Attributes.OfType<ColumnAttribute>().FirstOrDefault();
if (column != null &&
propertyDescriptor.PropertyType == typeof(string) &&
!column.CanBeNull &&
value.IsNullOrBlankString())
{
valid = false;
bindingContext.ModelState[propertyDescriptor.Name].Errors.Add("A value is required");
}
return valid;
}
}
我想知道这是否是实现将必需的字符串字段验证添加到 MVC 中的默认验证的目标的最有效方法。