控えめなjquery検証で、AJAX呼び出しを介して動的に読み込まれる部分的なビューを処理しようとして問題が発生しています。
私は何日もかけて、このコードを運が悪ければ動作するようにしてきました。
これがビューです:
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
パーシャルビュー:
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
モデル:
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
コントローラー:
public ActionResult GetView()
{
return PartialView("Test");
}
そして最後に、javascript:
$(doument).ready(function () {
$.ajax({
url: '/test/getview',
success: function (res) {
$("#res").html(res);
$.validator.unobtrusive.parse($("#res"));
}
});
$("#submit").click(function () {
if ($("form").valid()) {
alert('valid');
return true;
} else {
alert('not valid');
return false;
}
});
検証は機能しません。texboxに情報を何も入力しなくても、送信イベントはアラート( 'valid')を表示します。
ただし、ビューを動的にロードする代わり@Html.Partial("test", Model)
に、メインビューで部分ビューをレンダリングするために使用する場合(そして、AJAX呼び出しを行わない場合)、検証は正常に機能します。
これは、コンテンツを動的にロードした場合、コントロールがDOMにまだ存在していないためと考えられます。しかし$.validator.unobtrusive.parse($("#res"));
、新しくロードされたコントロールについてバリデーターをさせるのに十分なはずの呼び出しをして います...
誰か助けてもらえますか?
unobtrusive.parse
関数は、要素ではなくセレクターを引数として取ります。