使用 Html.ValidationSummary 和 Html.BeginForm 时,通常会在所有字段都验证并且 Controller 可以执行后续步骤时重新加载或导航离开页面。在这种情况下,无需清除验证摘要。
但是,当使用 Ajax.BeginForm 时,用户可能永远不会离开页面。一旦表单经过验证,控制权就会转到上面的 Controller ,但 Controller 可能会将用户发送回调用表单,因为需要解决一些服务器端验证问题。在这种情况下,.NET 中的一个明显错误不会清除 ValidationSummary。是的,我可以使用表单的 OnBegin 属性通过 JavaScript/JQuery 隐藏/清除它,但如果稍后在表单上需要它,比如当您使客户端验证无效时,它就永远不会取消隐藏。
我的表单片段:
@using (Ajax.BeginForm("ExistingLogin", "Home", null, new AjaxOptions { HttpMethod = "Post", OnBegin="onBegin", OnSuccess = "onSuccess", OnFailure = "onError" }, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary("Please correct the following errors:", new { @class = "alert alert-danger", @role = "alert" })
<div id="controllerResponse" class="alert alert-danger" role="alert" style="display:none;"></div>
你如何处理这个问题?
最佳答案
不要隐藏/显示验证器,而是遵循 jQuery 的做法,更改类:
function onComplete() {
$(".alert").removeClass("validation-summary-errors");
$(".alert").addClass("validation-summary-valid");
}
只是不确定在 OnComplete 中还是在 OnBegin 中执行此操作是否更好。
关于javascript - MVC 5 Html.ValidationSummary 在 AJAX 发布后仍然可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025530/