次の部分ビューでクライアント側の検証作業ができないようです。このビューは親ビューのdivTSettings div内にあります。 stackoverflowや他のサイトからたくさんのことを試してみましたが、何も動作していないようです。何か案は?jqueryのクライアント側の検証がMVC3の部分ビューで動作しない
<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>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
@using (Ajax.BeginForm("CreateT", "TAdmin", null,
new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "divTSettings"},
new { id = "CreateTForm" }))
{
<div>
<label>Name:</label>
<input type="text" name="tName" id="tName"/>
@Html.ValidationMessage("tName")
<input type="submit" value="Submit"/>
</div>
}
<script type="text/javascript">
$(function() {
$('#CreateTForm').validate({
rules: {
tName: {
required: true
}
},
messages: {
tName: {
required: 'Name required'
}
}
});
$("#CreateTForm").removeData("validator");
$("#CreateTForm").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("#CreateTForm");
});
</script>
回答ありがとうございますが、パーシャルビューはAJAXによって読み込まれません。親のモデルを使用して親によってロードされます。それはAJAXポストを作成しますが、検証は最初のロードでも機能しません。そして、あなたが見ることができるように、私はあなたがドキュメントのロードハンドラで言及した検証初期化を持っています。 – blue
ああ、これらの初期化をdocument.loadで行う必要はありません。あなたのページにjquery、jquery.validation、jquery.validation.unobtrusiveスクリプトを含めるだけです。また、あなたが示したコードによれば、フォームの '.validate'ハンドラを購読してカスタムバリデーションを宣言しているようです。しかし、それはASP.NET MVCとjQueryの邪魔にならない検証がどのように機能するかではありません。ビューモデル上でデータアノテーション( '[Required]'属性のようなもの)を使うか、独自のクライアント側のバリデーションルールを完全に定義するかを選択する必要があります。 –
カスタム検証ルール(フォームの '.validate'メソッドを購読する)を書く場合は、ページから' jquery.unobtrusive.validation.js'スクリプトを削除する必要があります。それらの2つのものは完全に互換性がありません。したがって、あなたが決定するのはあなたです:組み込みのASP.NET MVCを使用するか(ビューモデルで '[必須]'などの検証属性を使用するか)、またはjquery.validateプラグインを単独で使用して、あなたのカスタムルール。しかし、互換性がないため、2つを混ぜ合わせてはいけません。 –