我有一个带有表单的模式弹出窗口。当通过 ajax(使用 jQuery)提交时,表单被验证并且一个 javascript 回调函数检查模型是否有效。如果是,则重置并隐藏模式弹出窗口,如果不是,则将 html 响应文本转储到模式弹出 div 中,以供用户查看故障。
我在 ASP.NET MVC 中使用 jQuery ajaxSubmit 和仅接受 POST 动词并返回 PartialViewResult 的操作来执行此操作。我在我网站上的几个地方执行此操作,但是在 2 个这样的工作流程关闭 1 页时遇到问题。一个有效,另一个无效,使用相同的代码。
这是问题所在:
<% using (Html.BeginForm("ApplyPayment", "SomeController", FormMethod.Post, new { @id = "frmApplyPayment" })) { %>
<%= Html.AntiForgeryToken(SomeSaltString) %>
<%= Html.Hidden("ModelValid", ViewData.ModelState.IsValid) %>
...
<% } %>
在调试过程中,即使在出现验证错误时 ViewData.ModelState.IsValid 为 false,“#ModelValid”也会设置为“True”!我尝试了许多将其显式设置为 false 的方法(例如 ViewData.ModelState.IsValid ? "True" : "False")。即使变量为假并隐藏弹出窗口,它也总是显示为真。到底是怎么回事?
这里有更多代码供参考:
function SubmitPaymentForm(form) {
$(form).ajaxSubmit({ target: "#modalApplyPayment", success: CheckPaymentValidity });
}
function CheckPaymentValidity(responseText) {
if ($("#ModelValid").val() != "True") {
ShowModalPopup("#modalApplyPayment");
}
else {
HideModalPopup("#modalApplyPayment");
}
}
这一切都完全适用于电子邮件功能的相同基本页面的非常相似的工作流程(接受地址的弹出窗口,在 ajax 帖子上验证,如果存在验证错误则显示弹出窗口)。