4

この質問は、asp.net mvc3 フレームワークに最も関連しています。「asp.net mvc3でjQueryを使用して、動的に追加された入力フィールドのアクティブな検証を確実にするにはどうすればよいですか?」として始まりました。ただし、いくつかの検索、テスト、およびコーヒーの後、私はこれに出くわしました:

function reValidate(formId) {
 $("#" + formId).removeData("validator");
 $("#" + formId).removeData("unobtrusiveValidation");
 $.validator.unobtrusive.parse("#" + formId);
}

これはうまくいきます。しかし、フレームワークが実際に使用しているメカニズムについては、もっと興味があります。スクリプトに基づいて完全に生成されたページがあります。ビュー内の唯一のものは、ライブラリをロード<div>するための<script>タグ、<script>および<div>. 完全に動的なページをレンダリングした後、検証は完璧です。ただし、ページの読み込み時に使用されたのと同じプロセスが、ページの読み込み後に新しいコンテンツを含めるために使用された場合、検証は失敗します。もちろん、電話してreValidate()ください。

しかし -

a) ページが読み込まれた後 (または読み込まれたとき)、フレームワークはどのように検証をインスタンス化しますか?

b) フレームワークのどの部分がそれを処理しますか? それは mvc3 部分ですか、asp.net 部分ですか、剃刀エンジンですか、それとも別の部分ですか?

4

2 に答える 2

6

a)ページが読み込まれた後(または読み込まれたときに)、フレームワークはどのように検証をインスタンス化しますか?

DOMを解析し、data-*入力フィールドの属性を探し、jquery.validateルールを追加します。jQuery validateは、ASP.NET MVCとは関係のないクライアント側の検証プラグインであり、任意のサーバー側のフレームワークまたはプレーンな静的HTMLでも使用できます。

b)フレームワークのどの部分がそれを処理しますか?それはmvc3の部分、asp.netの部分、かみそりのエンジン、または別の部分ですか?

それはjquery.validate.unobtrusive.jsスクリプトです。ASP.NET MVCヘルパーなどHtml.TextBoxForは、モデルメタデータをdata-*使用して、モデルに使用したデータ注釈に基づいて適切な属性を持つ入力フィールドを生成します。これらの属性には、ネイティブのjquery検証ルールを生成するために必要なすべての情報が含まれています。したがって、目立たないスクリプトは、ASP.NETMVCモデルメタデータとjquery.validateプラグインの間に接着剤を作成します。この仕事をするのは$.validator.unobtrusive.parse関数です。これが、DOMを動的に変更するときに手動で呼び出す必要がある理由ですdata-*-jquery検証ルールに変換する必要がある属性を追加/削除しています。内でどのように実装されているかを確認することを躊躇しないでくださいjquery.validate.unobtrusive.js

于 2012-06-12T18:32:37.360 に答える
2

これは、Darin Dimitrovの回答で説明されているように機能します。クライアント側では、サーバー側で、mvcレンダリングエンジンは、モデルに提供されたメタデータ(通常はモデルクラスのプロパティに設定する属性)を使用して、どのデータであるかを決定します。 data- *属性に必要であり、レンダリングする必要があるかどうか。
より正確な答えに興味がある場合は、いつでもmvc 3のソースコードを調べて、メタデータがhtmlヘルパーメソッドによっていつどのように読み取られるかを正確に確認できます。これにより、最終的にhtml文字列が作成されます。

于 2012-06-12T18:38:40.947 に答える