ASP.Net MVCの控えめな検証によって生成されたHTMLコードを理解する

これは、ASP.Net MVCシリーズの控えめな検証の理解のパート2です。



1.内部jQuery検証プラグインの動作

2. ASP.Net MVCの控えめな検証によって生成されたHTMLコードを理解する

3. ASP.Net MVCの控えめなjQuery validateプラグインの内部作業。



この記事で説明する内容:





控えめなJavaScriptの基本的な考え方





Microsoftは、MVCの最初のバージョンで最初の検証モジュールを導入しました。 モジュールは各バージョンで改善され、ASP.Net MVC 3で目立たない検証に変わりました。

要するに、主に個別のjsファイルに書き込む最新のJavaScriptでさえ、Htmlに関連するデータが必要な場合があり、そのためHtmlページ内にJavaScriptオブジェクトのメタデータを書き込みます。 ページ上のオブジェクトのメタデータを渡すjsファイルから関数を呼び出します。



控えめなJavaScriptの目標の1つは、JavaScriptをHTMLマークアップから分離することです。

詳細については、 こちらを参照してください(著者は、英語版ウィキペディアにある控えめなJavaScriptに関する記事を参照しています。翻訳者)



通常の検証と控えめな検証の違い。





以下は、MVC 2検証と控えめなMVC 3検証を使用して生成されたモデルコードとHTMLマークアップです。



私たちのモデル

C#

public class ValidationModel { [Required] public string FirstName { get; set; } [Required, StringLength(60)] public string LastName { get; set; } [Range(1, 130)] public int Age { get; set; } }
      
      







htmlヘルパーを使用したMVC 2での表現

HTML

 <label for="FirstName">FirstName</label> <input id="FirstName" class="text-box single-line" type="text" name="FirstName" value="" /> <span id="FirstName_validationMessage" class="field-validation-valid"></span> <label for="LastName">LastName</label> <input id="LastName" class="text-box single-line" type="text" name="LastName" value="" /> <span id="LastName_validationMessage" class="field-validation-valid"></span> <label for="Age">Age</label> <input id="Age" class="text-box single-line" type="text" name="Age" value="" /> <span id="Age_validationMessage" class="field-validation-valid"></span> <script type="text/javascript">// <![CDATA[ if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"FirstName","ReplaceValidationMessageContents":true,"ValidationMessageId":"FirstName_validationMessage","ValidationRules":[{"ErrorMessage":"The FirstName field is required.","ValidationParameters":{},"ValidationType":"required"}]},{"FieldName":"LastName","ReplaceValidationMessageContents":true,"ValidationMessageId":"LastName_validationMessage","ValidationRules":[{"ErrorMessage":"The LastName field is required.","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field LastName must be a string with a maximum length of 60.","ValidationParameters":{"max":60},"ValidationType":"length"}]},{"FieldName":"Age","ReplaceValidationMessageContents":true,"ValidationMessageId":"Age_validationMessage","ValidationRules":[{"ErrorMessage":"The field Age must be between 1 and 130.","ValidationParameters":{"min":1,"max":130},"ValidationType":"range"},{"ErrorMessage":"The Age field is required.","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field Age must be a number.","ValidationParameters":{},"ValidationType":"number"}]}],"FormId":"form0","ReplaceValidationSummary":true,"ValidationSummaryId":"validationSummary"}); // ]]></script>
      
      







htmlヘルパーと控えめな検証を使用したMVC 3での表現

HTML

 <label for="FirstName">FirstName</label> <input id="FirstName" class="text-box single-line" type="text" name="FirstName" value="" data-val="true" data-val-required="The FirstName field is required." /> <label for="LastName">LastName</label> <input id="LastName" class="text-box single-line" type="text" name="LastName" value="" data-val="true" data-val-length="The field LastName must be a string with a maximum length of 60." data-val-length-max="60" data-val-required="The LastName field is required." /> <label for="Age">Age</label> <input id="Age" class="text-box single-line" type="text" name="Age" value="" data-val="true" data-val-number="The field Age must be a number." data-val-range="The field Age must be between 1 and 130." data-val-range-max="130" data-val-range-min="1" data-val-required="The Age field is required." />
      
      







このコードは、 Brad Wilsonの記事「ASP.NET MVC 3の控えめなクライアント検証」から引用しています。

ご覧のとおり、HTMLの「input」要素には、どの検証ルールが適用されるのかがわかりません。 ページの各要素に適用される検証情報を含む大きなJavaScriptオブジェクトは1つだけです。

一方、MVC 3で生成された「input」要素を見ると、より多くのメタデータが含まれていることがわかります。 検証に必要なすべての情報は、data- *属性に含まれています。 巨大なJavaScriptオブジェクトは必要ありません



控えめな検証について



1.「input」要素、それらの検証ルール、およびそれらの機能


それでは、「data- *」属性で何が起こるかを見てみましょう。



MVCは、検証ルールに基づいて「data- *」属性を作成します。

jquery.validate.unobtrusiveはルールを読み取り、ルールをパスに変換します。

控えめな検証がこれらのルールを変換した後、「validate()」メソッドを呼び出し、ルールの配列を設定とともに渡して検証します。



HTML要素の控えめなルールには、3つの部分があります。







生成された入力要素をより詳細に検討し、data- *属性について説明します。



 <input id="Name" class="ignore" type="text" name="Name" value="" data-val="true" data-val-required="*" data-val-atleastonerequired="Enter at least Name, Email or Lastname" data-val-atleastonerequired-attributes="Email,LName" />
      
      







要素には2つのルールが適用されます。 1つは「必須」の組み込み属性で、もう1つは「atleastonerequired」と呼ばれる独自の属性です。

ユーザーがデータを入力せずに「フォームを送信」をクリックすると、要素が必要であることを示す検証メッセージとして「*」が表示されます。

ユーザーが「atleastonerequired」ルールに違反すると、ユーザーの検証メッセージが表示されます。



2.検証メッセージとそれらが控えめな検証でどのように機能するか。


例から始めましょう。



 <!-- Required input using unobtrusive validation --> <input id="FirstName" class="text-box single-line" type="text" name="FirstName" value="" data-val="true" data-val-required="The FirstName field is required." /> <!-- The input's validation message placeholder --> <span data-valmsg-replace="true" data-valmsg-for="Name" class="field-validation-valid help-inline" />
      
      





ご覧のとおり、コンテナにはエラーメッセージ用の2​​つの「data- *」要素があります







検証ルールの1つに違反した場合、「class」属性の値には「field-validation-error」が含まれ、そうでない場合は「field-validation-valid」が含まれます。



Nadeem Khedr 記事「Asp.net MVCの控えめな検証によって生成されたHTMLを理解する」の翻訳



アップデート06/01/13:シリーズの他の投稿へのリンクを追加



All Articles