既存のフォームをハイジャックしてサーバーに POST しています。jQuery validate はほとんどの検証を行いますが、サーバーで検証が失敗した場合は、JSON としてクライアントにエラーを返します。
以下は、それを行うコードです。
<script type="text/javascript">
$(function () {
$("form").submit(function (e) {
var $form = $(this);
var validator = $form.data("validator");
if (!validator || !$form.valid())
return;
e.preventDefault();
$.ajax({
url: "@Url.Action("index")",
type: "POST",
data: $form.serialize(),
statusCode: {
400: function(xhr, status, err) {
var errors = $.parseJSON(err);
validator.showErrors(errors);
}
},
success: function() {
// clear errors
// validator.resetForm();
// just reload the page for now
location.reload(true);
}
});
});
});
</script>
問題は、POST が成功した場合に検証エラーをクリアできないように見えることです。呼び出してみましvalidator.resetForm()
たが、違いはありません。呼び出しによって追加されたエラー メッセージshowError()
が引き続き表示されます。
jQuery.validate.unobtrusive プラグインも使用していることに注意してください。