0

を使用したフォームで使用したいモデルがありEditorForModel()ます。文字列以外のすべてのデータ型(bool、DateTimeなど)の場合、[Required}データアノテーションを設定していなくても、作成されたフォームによってフィールドが必須になります。Object.cshtmlこれが必須フィールドではないことを認識するようにファイルを設定するにはどうすればよいですか?

4

1 に答える 1

1

これは「必須」の問題ではなく、基本のModelBindingコンポーテーションです。デフォルトではnull許容型をnullにすることはできません。ModelBindingが失敗した場合、Model.IsValid =false=>この種のエラーを表示します。

bool?(null許容)またはstring(同じ)を使用した「エラー」メッセージは表示されませんが、 bool(そうではない)を使用した場合は表示されます。

(これは基本的な「強い型のロジック」です:DateTime dt = nullc#で書いてみてください...)

したがって、1つの解決策は、新しいModelBinderを作成することです(たとえば、すべての「null」ブール値がfalseに設定されていると言います)。しかし、それがあなたに必要なものかどうかは本当にわかりません。デフォルトの動作は一般的に問題ありません

CustomModelBinderの例を示します。ほとんどの数値フィールドに0の値を入力する必要がないように使用します。Int32、UInt32、およびdouble値のフィールドに値が入力されていない場合は、値を0に設定します。

public class AcceptNullAsZeroModelBinder : DefaultModelBinder
    {
        protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
        {
            if (value == null && (
                propertyDescriptor.PropertyType == typeof(Int32) ||
                propertyDescriptor.PropertyType == typeof(UInt32) ||
                propertyDescriptor.PropertyType == typeof(double)
                ))
            {
                base.SetProperty(controllerContext, bindingContext, propertyDescriptor, 0);
                return;
            }

            base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
        }
    }
于 2012-05-10T22:48:36.800 に答える