如何在不提交的情况下触发 ASP .NET Core MVC 客户端验证

How to trigger ASP .NET Core MVC client-side validation without submitting

如何在不提交表单的情况下在 ASP .NET Core MVC 中触发客户端验证?

我正在使用模式,需要触发验证(不提交表单)。

在jQuery,我可以做到这一点

$('#formID').validate().form()

但是,我想触发 ASP .NET Core 中包含的非侵入式验证。

我想我们可以使用这段代码:

public class Movie
{
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Title { get; set; }

    [ClassicMovie(1960)]
    [DataType(DataType.Date)]
    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

    [Required]
    [StringLength(1000)]
    public string Description { get; set; }

    [Range(0, 999.99)]
    public decimal Price { get; set; }

    public Genre Genre { get; set; }

    public bool Preorder { get; set; }
}

请检查this article

ASP.NET Core 仍然存在不显眼的验证,您只需包含相关脚本即可。这是一个完整的例子。

假设这个模型:

public class SomeViewModel
{
    [Required]
    public string Name { get; set; }
}

而这个控制器动作:

public IActionResult Index()
{
    return View(new SomeViewModel());
}

最后,观点:

@model SomeViewModel

@{
    ViewData["Title"] = "Home Page";
}

<form asp-action="Index" id="formID" method="post">
    <input asp-for="Name" />
    <span asp-validation-for="Name"></span>
    <input type="submit" />
</form>

@section Scripts {
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
    <script type="text/javascript">
        $(function () {
            // Silly example to demonstrate.
            $('#formID').validate().form();

            if ($('#formID').valid() === false) {
                console.log("invalid");
            } else {
                console.log("valid!");
            }
        });
    </script>
}

如果你看一下 ~/Views/Shared/_ValidationScriptsPartial.cshtml,你会发现它包含:

<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

如果您查看开发人员工具控制台,它应该会在加载页面时立即验证表单,并在 Name 文本框旁边显示必填字段缺少验证消息。