Поэтому я использую ASP.NET MVC RC1 и использую валидацию DefaultModelBinder, чтобы показать ошибки валидации, когда целочисленные поля, не равные NULL, не установлены в значение. Это сделано по умолчанию MVC. Однако то же самое не относится к строковым (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.