そのため、ASP.NET MVC RC1 を使用し、DefaultModelBinder の検証を使用して、null 以外の整数フィールドに値が設定されていない場合に検証エラーを表示しています。これは、MVC によってデフォルトで行われます。ただし、同じことは string(varchar) フィールドには当てはまりません。バインダーにはビューから空の文字列が渡されるためです。これは、null 以外の varchar 列に対して完全に有効です。
ただし、実際には、列を非 null としてマークするときは、ほとんどの場合、列を空にしないようにすることを意味します。そこで、その検証チェックをデフォルトのバインダーに追加するこの方法を思いつきました。
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 の既定の検証に追加するという目標を達成する最も効率的な方法であるかどうか疑問に思っています。