繁体   English   中英

即使提交失败,ASP.NET Core Unobtrusive客户端验证表单onsubmit也会触发

[英]ASP.NET Core Unobtrusive Client Side Validation Form onsubmit fires even on validation failure

注意:这与.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触发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")选择器,但是如果您在一个页面上有多个表单,则可能需要更具体一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM