c# - ASP.NET Core Unobtrusive Client Side Validation Form onsubmit 即使在验证失败时也会触发
问题描述
注意:这与 .NET Core v2.0 有关。您可能会找到相关的帖子,但它们并没有解决我面临的问题。
我正在使用以下代码应用不显眼的客户端验证:
<form asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" onsubmit="showPleaseWait()" >
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Username" class="control-label"></label>
<input asp-for="Username" class="form-control" placeholder="Username" />
<span asp-validation-for="Username" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Password" class="control-label"></label>
<input asp-for="Password" value="" class="form-control" placeholder="Password" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success btn-lg" style="margin:auto;display:block">Log in</button>
</div>
</form>
好消息是它在客户端执行验证。
但是,form.onsubmit
即使验证失败,也会触发事件。结果我的showPleaseWait
方法被调用。我认为不应该调用它,因为由于验证失败,表单尚未提交。
下面是模型:
public class LoginViewModel
{
[Required]
public string Username { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
任何解决方案或解决方法将不胜感激。
解决方案
jQuery Unobtrusive Validation 和更高级别的 jQuery Validation 插件不会阻止提交事件的引发,正如您所指出的,这意味着每当用户尝试提交表单showPleaseWait()
时都会调用您的函数。
showPleaseWait
完成这项工作的一种选择是在尝试运行您自己的代码之前从您的函数中查询验证状态。这是一个例子:
function showPleaseWait() {
if ($("form").valid()) {
// Your code here.
}
}
这个实现利用了 jQuery Validation 的valid
功能,它:
检查所选表单是否有效或所有所选元素是否有效。
我刚刚在$("form")
上面使用了一个简单的选择器,但是如果您在一个页面上有多个表单等,这可能需要更具体。
推荐阅读
- reactjs - 使用钩子看不到方法辅助函数内部的状态
- android - 如何获取所有正在运行的活动列表并选择从暂停到开始状态的任何活动?
- ignite - 如何在 SQL 创建命令 Apache Ignite 中使用同一个键需要引用两次的 Affinity Collocation?
- css - Senaite LIMS (Plone 4.3.18) css 在启用 https 的 Nginx 上不起作用
- git - 成功自动解决合并冲突后,使用 KDiff 审查合并操作
- javascript - 奇怪的无效或意外令牌错误
- c# - 如何通过泛型使用嵌套类列表创建基类列表而不进行强制转换
- java - Web 浏览器的异常行为
- mysql - 如何创建 MySQL 视图
- apache-storm - 如何将延迟指标从 Apache Storm 发送到 Graphite 服务器?