Asp.net mvc 3 尝试添加ajax post函数时MVC3验证失败
我在使用jquery将表单数据发布到控制器时遇到一些验证问题 如果我不使用jquery发表文章,这段代码可以正常工作,验证也可以正常进行Asp.net mvc 3 尝试添加ajax post函数时MVC3验证失败,asp.net-mvc-3,jquery,jquery-validate,Asp.net Mvc 3,Jquery,Jquery Validate,我在使用jquery将表单数据发布到控制器时遇到一些验证问题 如果我不使用jquery发表文章,这段代码可以正常工作,验证也可以正常进行 <div id="window"> @using (Html.RequiredFieldsMessage()){} @using (Html.BeginForm("","",FormMethod.Post,new{id="card-payment"})) { @Html.ValidationSummary(true, "Please fix
<div id="window">
@using (Html.RequiredFieldsMessage()){}
@using (Html.BeginForm("","",FormMethod.Post,new{id="card-payment"}))
{
@Html.ValidationSummary(true, "Please fix the errors below.")
<div class="inputForm no-border">
<div class="fr">
@Html.LabelFor(model => model.DpsPaymentModel.CardHolderName)
@Html.EditorFor(model => model.DpsPaymentModel.CardHolderName)
@Html.ValidationStyledMessageFor(model => model.DpsPaymentModel.CardHolderName, false)
</div>
<div class="fr">
@Html.LabelFor(model => model.DpsPaymentModel.CardNumber)
@Html.EditorFor(model => model.DpsPaymentModel.CardNumber)
@Html.ValidationStyledMessageFor(model => model.DpsPaymentModel.CardNumber, false)
</div>
<div class="fr">
@Html.LabelFor(model => model.DpsPaymentModel.DateExpiry)
@Html.EditorFor(model => model.DpsPaymentModel.DateExpiry)
@Html.ValidationStyledMessageFor(model => model.DpsPaymentModel.DateExpiry, false)
</div>
<div class="fr">
@Html.LabelFor(model => model.DpsPaymentModel.Cvc2)
@Html.EditorFor(model => model.DpsPaymentModel.Cvc2)
@Html.ValidationStyledMessageFor(model => model.DpsPaymentModel.Cvc2, false)
</div>
<div class="fr">
@Html.LabelFor(model => model.DpsPaymentModel.Amount)
@Html.EditorFor(model => model.DpsPaymentModel.Amount)
@Html.ValidationStyledMessageFor(model => model.DpsPaymentModel.Amount, false)
</div>
<div class="fr">
<button type="submit" id="process-payment">Submit</button>
</div>
</div>
}
</div>
您正在调用
event.preventDefault()在您的点击处理程序中,没有定义任何事件
变量,所以我猜您会得到一个javascipt错误。顺便问一下,你看过javascript调试工具的控制台了吗
也许您的意思是单击处理程序将此作为参数:
$("#process-payment").click(function (evt) {
evt.preventDefault();
...
});
但我建议您订阅表单的submit事件,而不是submit按钮的click处理程序。例如,当用户在某个输入字段内按Enter键以提交表单而不是按submit按钮时,这将说明这种情况
另外,验证表单是否有效的正确方法是form.valid()
,而不是像您的示例中那样form.validate()
,此外,您不需要调用$.validator.unobtrusive.parse,除非您正在使用新表单更新DOM,例如AJAX调用。在这种情况下,当您用新的表单元素替换DOM后,您应该在成功回调中调用它,以便解析新的不引人注目的验证规则
因此:
$("#process-payment").click(function (evt) {
evt.preventDefault();
...
});
$('#card-payment').submit(function(evt) {
evt.preventDefault();
var form = $(this);
if (form.valid()) {
$.ajax({
url: this.action,
type: this.method,
data: form.serialize(),
success: function (result) {
console.log(result);
},
error: function (jqXhr, textStatus, errorThrown) {
alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
},
complete: function () {
// $("#ProgressDialog").dialog("close");
}
});
} else {
console.log("invalid");
}
});