2011-11-09 8 views
0

誰か?これに関する別の質問がありますが、唯一の答えはJavaScriptのバリデーションをコード化することでした。私の部分的なビュー( "$は定義されていません")での作業も拒否しています。フォーム検証がMVC3の部分ビューで機能しないのはなぜですか?

とにかく、私はちょうど空白のままにすることができない必須フィールドのための簡単な検証をしたいのjavascript、int型が必要な数のフィールドを使用したくない、など

誰でも検証と部分図にいくつかの光を当てることができます?

+1

は、我々はいくつかのコードを参照してくださいでしたか? – simonlchilds

+0

いくつかのコードを表示する必要はありますか?部分的なビューでの検証は、MVC3(またはMVC2)の一般的な問題と思われ、Javascriptの回避策以外の解決策はほとんどないようです。 – DevDave

+0

@タイラー、はい、問題を再現できるいくつかのコードを表示する必要があります。個人的に私はASP.NET MVCの部分的な部分でクライアント側の検証に問題は一度もありませんでした。 –

答えて

4

AJAXを使用して部分ビューを読み込んでいると思われます。このような場合には、メソッドを手動で呼び出す必要があります。これは、this articleで説明されているように、DOMの新しい内容を注入した後に行います。

ブラッド・ウィルソンはまた、彼のblog postでこれを議論:

をページが 読み込みが完了した際に邪魔にならないクライアント検証スクリプトを自動的に検証ルールのためのHTMLの 初期セットを解析します。あなたのページが新しいHTMLコンテンツ(おそらく throught Ajaxまたはクライアント側のアプリケーションコード)を動的に追加する場合、 は新しいHTML要素のクライアント検証のためにその新しいHTMLを解析することを望むかもしれません。新しいHTMLを解析するために

、あなたはそれをあなたが解析されたい HTMLのためのセレクタを渡し、 jQuery.validator.unobtrusive.parse()メソッドを呼び出すことができます。 jQuery.validator.unobtrusive.parseElement()関数を呼び出して、 HTML要素を1つ解析することもできます。限り$はあなたが適切なスクリプトが含まれていることを確認する必要がありエラーが定義されていないとして

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

また、*は、Microsoftのいずれかを参照していないことを確認してくださいの.jsスクリプト。これらは廃止されており、ASP.NET MVC 3では使用しないでください。

もちろん、これはあくまで想定していることであり、コードを表示していないため、何をしているのか分かりません。

0

私は同じ問題があり、$ .validator.unobtrusive.parse()を同じフォームで2回呼び出すことができないことがわかりました。 最初にサーバーからフォームをロードするとき、フォームは控えめなライブラリによって自動的に解析されます。入力要素をフォームに動的に追加し、$ .validator.unobtrusive.parse()を再度呼び出すと、それは機能しません。 parseElement()も同様です。あなたは$ .validator.unobtrusive.parseを呼び出す前に

ので、そのようにフォームからオリジナルのバリデータと控えめな検証を削除します。

success: function (html) { 
         $("#div-id").append(html); 
         var form = $("#div-id").closest("form"); 
         form.removeData('validator'); 
         form.removeData('unobtrusiveValidation'); 
         $.validator.unobtrusive.parse($("#editorRows")); 
        } 
関連する問題