ASP.NET Core非侵入式验证自定义错误类服务端验证失效问题
解决ASP.NET Core服务端验证自定义Bootstrap类不生效的问题
要让服务端验证也使用is-invalid和is-valid类,需要在ASP.NET Core的服务配置中覆盖默认的验证CSS类——因为服务端的标签助手(Tag Helper)默认使用input-validation-error和input-validation-valid类,和客户端验证的配置不互通。
步骤1:配置ASP.NET Core服务端验证类
在Program.cs(.NET 6+)或Startup.cs(.NET 5及更早版本)中,修改MvcOptions的HtmlHelperOptions,指定自定义的验证类:
// Program.cs 示例 var builder = WebApplication.CreateBuilder(args); // 添加Razor Pages/MVC服务并配置验证类 builder.Services.AddRazorPages() .AddMvcOptions(options => { // 设置服务端验证失败时输入框的错误类 options.HtmlHelperOptions.ValidationInputCssClassName = "is-invalid"; // 设置服务端验证通过时输入框的有效类(可选) options.HtmlHelperOptions.ValidationValidCssClassName = "is-valid"; }); var app = builder.Build(); // ... 其他中间件配置 ... app.Run();
步骤2:保留现有客户端验证配置
你已有的客户端验证配置无需修改,它会继续控制前端验证的类:
const validationCustomSettings = { validClass: "is-valid", errorClass: "is-invalid" }; jQuery.validator.setDefaults(validationCustomSettings); jQuery.validator.unobtrusive.options = validationCustomSettings;
可选:优化验证消息的Bootstrap样式
为了让验证消息完全符合Bootstrap的样式规范,建议将asp-validation-for标签的text-danger类替换为invalid-feedback:
<!-- 原代码 --> <span asp-validation-for="ADR.TTIS" class="text-danger"></span> <!-- 修改后 --> <span asp-validation-for="ADR.TTIS" class="invalid-feedback"></span>
完成以上配置后,服务端验证失败时输入框会自动添加is-invalid类,和客户端验证的效果完全一致,同时验证消息也会以Bootstrap标准的错误提示样式显示。
内容的提问来源于stack exchange,提问作者Reafidy
相关产品推荐
相关产品推荐

