1

そのため、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 の既定の検証に追加するという目標を達成する最も効率的な方法であるかどうか疑問に思っています。

4

1 に答える 1

1

デフォルトのモデルバインディング(特にTypeHelpers.TypeAllowsNullValue)を調べましたが、これに適したものはありません。文字列を含む型にIDataErrorInfoを実装することもできますが、サポートする型ごとに実装する必要があります。だからあなたがしていることは大丈夫です。サードパーティのコードを受け入れる場合は、xVal検証フレームワークを検討する価値があります。次に、System.ComponentModelの属性などを使用して、null許容でない文字列を装飾できます。

于 2009-02-13T14:09:59.910 に答える