asp.net-core - 通过 AJAX 发送表单并通过 fluentValidation 进行验证
问题描述
我想通过 AJAX 发送表单并通过 mvc 核心中的 fluentValidation 进行验证。请指导我
解决方案
这是一个工作演示,您可以参考:
FluentValidation.AspNetCore
通过安装适当的 NuGet 包来添加对程序集的引用:Install-Package FluentValidation.AspNetCore
AddFluentValidation
通过在方法内调用扩展方法在应用程序的 Startup 类中配置 FluentValidationConfigureServices
,并使用该AddFromAssemblyContaining
方法自动注册特定程序集中的所有验证器services.AddMvc() .AddFluentValidation(fv => { fv.RegisterValidatorsFromAssemblyContaining<PersonValidator>(); //If you want to disable this behaviour so that FluentValidation is the only validation library that executes, //you can set the RunDefaultMvcValidationAfterFluentValidationExecutes to false in your application startup routine fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false; }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
假设
PersonValidator
定义为验证一个名为Person
public class Person { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public int Age { get; set; } } public class PersonValidator : AbstractValidator<Person> { public PersonValidator() { RuleFor(x => x.Id).NotNull(); RuleFor(x => x.Name).Length(0, 10); RuleFor(x => x.Email).EmailAddress(); RuleFor(x => x.Age).InclusiveBetween(18, 60); } }
控制器
[HttpPost] public async Task<IActionResult> CreatPerson(Person person) { if (!ModelState.IsValid) { // re-render the view when validation failed. return BadRequest(); } //Save the person to the database, or some other logic _context.Add(person); await _context.SaveChangesAsync(); var message = "Person successfully created"; return Ok(message); }
查看和相关的jQuery
@model TestExample.Models.Person <hr /> <div class="row"> <div class="col-md-4"> <form id="formdata"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="Name" class="control-label"></label> <input asp-for="Name" class="form-control" /> <span asp-validation-for="Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Email" class="control-label"></label> <input asp-for="Email" class="form-control" /> <span asp-validation-for="Email" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Age" class="control-label"></label> <input asp-for="Age" class="form-control" /> <span asp-validation-for="Age" class="text-danger"></span> </div> <div class="form-group"> <input type="submit" value="Create" class="btn btn-primary" /> </div> </form> </div>
@section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} <script> $("#formdata").submit(function (e) { e.preventDefault(); var form = $(this); $.ajax( { type: "post", url: "/people/CreatPerson", data: form.serialize(), success: function (data) { alert(data); }, error: function (data) { alert(data); } }); }); </script> }
有关 FluentValidation 的更多详细信息,您可以参考https://fluentvalidation.net/aspnet
推荐阅读
- r - 框架(动画)不考虑更新菜单选择的参数
- material-ui - 材质表滚动条样式
- javascript - jQuery在加载时显示特定宽度的隐藏圆形文本何时应该隐藏
- docker - Docker for Windows - IPv4 端口意外关闭,IPv6 端口不受影响
- r - R:如何根据特定情况将值从一个数据帧传输到另一个数据帧?
- c# - Xamarin iOS 下的 Hi-jack NSLog
- python - 重命名 Fastapi/Pydantic json 输出字段
- python - 在python中将32位二进制转换为十进制
- scala - sbt 未观察到包名
- python - 如何使用 django 在另一个模型中创建元素