検証後にサブミットハンドラが実行されません。それは前に実行されます。それを試してみてください。
$('form').submit(function() {
alert('validation hasn\'t run yet at this point => see there is no red color over your form input fields yet');
if ($(this).valid()) {
alert('the form is valid');
} else {
alert('the form is not valid');
}
});
UPDATE:私はまだ問題を再現することができません
改訂質問の後。ここに私のモデルです:
public class MyModel
{
[Required]
public string Name { get; set; }
}
、ここで私の見解です:私は空白の名前フィールドを残して、フォームを送信した場合、新しい値が適切に割り当てられている今、
@model MyModel
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm(null, null, FormMethod.Post, new { }))
{
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
<input type="submit" value="OK" />
}
<script type="text/javascript">
$('form').submit(function() {
$('#Name').val('some value');
});
</script>
、フォームが正常に送信されますエラーのないサーバー。新しい値を割り当てた$('#Name').val('some value');
行を削除し、空のフィールドでフォームを送信しようとすると、クライアント側の検証がトリガーされ、フォームは送信されません。
私はこの問題を解決しました。私は、jQueryドキュメント・レディ・ハンドラの中にサブミット・ハンドラを持っていました。私はそれを削除した後、私は望むように提出前にフォームの提出を操作することができました。 – Mark
上記のコメントで混乱している人は、ドキュメントハンドラから送信ハンドラを移動してフォームのすぐ下に置く必要があります。 – Stijn