You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core升级后jQuery Validation无法识别自定义验证属性的问题

.NET Core升级后jQuery Validation无法识别自定义验证属性的问题

我之前升级.NET Core的时候也踩过这个一模一样的坑!你已经搞定了后端data属性的渲染,这步已经过了最挠头的一关,接下来就是让jQuery Unobtrusive Validation能“读懂”你的自定义验证规则就行,给你一步步拆解:

首先得确保后端的自定义验证属性正确实现了客户端验证接口:
你的AcceptedTermsAndConditionsAttribute得继承IClientModelValidator,并且在AddValidation方法里把验证标识配置对,比如:

public class AcceptedTermsAndConditionsAttribute : ValidationAttribute, IClientModelValidator
{
    public override bool IsValid(object value)
    {
        // 这里写核心验证逻辑,比如判断用户是否勾选了条款复选框
        return value is bool isAccepted && isAccepted;
    }

    public void AddValidation(ClientModelValidationContext context)
    {
        // 开启客户端验证标记
        context.Attributes.Add("data-val", "true");
        // 设置自定义错误提示,对应前端的data-val-acceptedtermsandconditions
        context.Attributes.Add("data-val-acceptedtermsandconditions", ErrorMessage ?? "请务必接受条款和条件");
        // 关键:设置验证类型标识,要和前端适配器名称完全匹配
        context.Attributes.Add("data-val-acceptedtermsandconditions-type", "acceptedtermsandconditions");
    }
}

然后是前端的核心操作——给Unobtrusive注册适配规则,因为jQuery Validation默认根本不知道你的自定义规则,得手动告诉它怎么把data属性转成验证逻辑:
首先注意脚本引入顺序,必须是这个顺序:

  1. jQuery
  2. jquery.validate.js
  3. jquery.validate.unobtrusive.js
  4. 你的自定义适配脚本

然后在适配脚本里加这段代码:

// 因为你的验证是布尔型(勾选/不勾选),用addBool最省事
$.validator.unobtrusive.adapters.addBool('acceptedtermsandconditions');

// 如果你的自定义验证需要传参数,就用add方法配合验证方法,比如:
// $.validator.unobtrusive.adapters.add('acceptedtermsandconditions', ['paramName'], function (options) {
//     options.rules['acceptedtermsandconditions'] = options.params;
//     options.messages['acceptedtermsandconditions'] = options.message;
// });
// 还要给jQuery Validation加对应的验证方法:
// $.validator.addMethod('acceptedtermsandconditions', function (value, element, params) {
//     // 这里写前端验证逻辑
//     return value === true || value === 'true';
// }, '');

最后再给你提几个容易踩的小坑:

  • 后端设置的验证类型名称和前端适配器的名称必须完全一致,大小写也不能错!比如后端用全小写的acceptedtermsandconditions,前端就不能写成驼峰式
  • 确认.NET Core项目启用了客户端验证,在Startup.cs里配置:
services.AddControllersWithViews()
    .AddMvcOptions(options =>
    {
        options.ClientValidationEnabled = true;
    });
  • 检查你的输入标记,确保data-val="true"和data-val-acceptedtermsandconditions都正确渲染,就像你提供的示例:
<input class="control--input valid" data-val="true" data-val-acceptedtermsandconditions="请接受条款和条件" />

按这些步骤走下来,jQuery Unobtrusive应该就能正确识别你的自定义验证了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:28:00