1

DataTypeAttributeクラスがSystem.ComponentModel.DataAnnotations.ValidationAttributeから継承されていることに気付きました。DataTypeAttributeは検証属性ですDefaultModelBinderクラスの場合

ASP.NET MVC DefaultModelBinderクラスでは、DataTypeAttributeは検証属性ですか?普通の英語では、ModelBinderはDataTypeAttributeに従ってオブジェクトを検証しますか?

たとえば、プロパティをDataType.EmailAddressに指定すると、電子メールアドレスを検証するか、この属性はオブジェクトのメタデータのみを提供します。

UPDATE私はSOに同様の質問を見つけました:だから

Is the DataTypeAttribute validation working in MVC2?

を、それが検証属性として機能していないことによります。なぜ、それが検証属性として機能していない場合、System.ComponentModel.DataAnnotations.ValidationAttributeから継承されているのですか?

答えて

4

DataTypeAttributeには検証ロジック自体が含まれていません。

ValidationAttributeから派生するのは、DataTypeと検証の両方である新しいカスタムデータ型クラスを作成して、すべてを1つにまとめることができるようにするためです。 .NETの不幸な副作用は多重継承を許さないことです。

はい、これはバリデータです...デフォルトでは検証は行われません。あなたが重労働をすることを忍耐強く待っています。 :)

実際には、MVC 3 Futuresを見ると、これを利用して新しいカスタムバリデーターを作成したことがわかります。そこでは、jQueryがすでにクライアント側の検証ロジックを提供できることを知っていました。サーバー側の検証ロジック(テンプレート化のためのDataTypeのメリットを保持)

1

ModelMetadata.DataTypeNamepropertyには、MVC3ソースコードに基づいて、の唯一の目的があります。このプロパティは、EditorFor/DisplayForテンプレート生成でのみ使用されます。だからあなたは正しかった。それは検証とは関係がない。だから私はなぜそれがValidationAttributeから継承されているのかわかりません。多分、フレームワークの作者は将来の使用のためにそれを予約しました。

+0

テンプレートエンジンによって使用されるのは理にかなっています。しかし、私が知る限り、かみそりビューエンジンはデフォルトでHtml5要素を生成していません。彼らはそれをどのように使うのかを掘り下げましたか? – tugberk

+0

いいえ、例えば: 'DataType.EmailAddress'は' 'を生成しません。これは[Html.EditorFor](http://msdn.microsoft.com/ja)にのみ使われます。 -us/library/ee402949.aspx)と[Html.DisplayFor](http://msdn.microsoft.com/en-us/library/ee407390.aspx)メソッドを使用して、既定のテンプレートを取得します。電子メールの場合、表示モードのmailtoリンクと編集モードのテキストボックスがあります。 – nemesv

関連する問題