我正在尝试使用实现可选的客户端验证
- ASP.NET MVC 4,
- 不显眼的 jQuery 验证,
- 不显眼的ajax
这工作正常
下面的图片显示了我对可选客户端验证的含义:我的表单上唯一的一个字段应该包含电子邮件,因此附加了一个电子邮件验证器。
现在我们点击保存。因为我们的文本“name@doamin”不是有效的电子邮件,所以会显示验证摘要。连同验证摘要,我们将取消隐藏“仍然保存”按钮。
第二个按钮是一个普通的提交按钮,只有class="cancel"
. 这指示jQuery.validate.js
脚本在使用此按钮提交时跳过验证。
这是视图的代码片段:
@using (Html.BeginForm())
{
<div>
<input data-val="true" data-val-email="Uups!" name="emailfield" />
<span class="field-validation-valid" data-valmsg-for="emailfield" data-valmsg-replace="false">*</span>
</div>
<input type="submit" value="Save" />
@Html.ValidationSummary(false, "Still errors:")
<div class="validation-summary-valid" data-valmsg-summary="true">
<input type="submit" value="Save anyway" class="cancel" />
</div>
}
这些都工作正常。
问题
第二个提交按钮 -如果我切换到 Ajax 表单,“仍然保存”将按预期停止工作。它的行为就像正常的一样,并且在验证成功之前阻止提交。
这是“ajaxified”视图的代码片段:
@using (Ajax.BeginForm("Edit", new { id = "0" },
new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "ajaxSection",
}))
{
<div>
<input data-val="true" data-val-email="Uups!" name="emailfield" />
<span class="field-validation-valid" data-valmsg-for="emailfield" data-valmsg-replace="false">*</span>
</div>
<input type="submit" value="Save" />
@Html.ValidationSummary(false, "Still errors:")
<div class="validation-summary-valid" data-valmsg-summary="true">
<input type="submit" value="Save anyway" class="cancel" name="saveAnyway" />
</div>
}
我已经调试jQuery.validation.js
以找出有什么区别,但失败了。
问题
欢迎任何解决或解决问题并让 ajax 表单按预期运行的想法。
附录
进行客户端验证是绝对必须的。服务器端验证不是一种选择。除了更高的流量(这个示例是一个简化 - 真实的表单包含更多的字段)和延迟之外,还有一件事是服务器端验证不会做的:客户端验证器会突出显示失去焦点的错误字段。这意味着一旦您切换到下一个字段,您就会收到反馈。