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

Episerver专用属性使用自定义特性时客户端验证不生效问题

问题原因

Episerver的实时客户端验证基于ASP.NET MVC的jQuery Validation验证体系,只有适配了这套体系的验证特性才会触发前端实时校验,你遇到的差异本质是自定义特性没有做客户端适配:

  • 系统内置的RegularExpressionAttribute原生实现了IClientValidatable接口,会自动给表单元素输出data-val-regex等验证规则属性,且Episerver默认已经注册了对应正则规则的前端验证适配器,所以可以直接触发实时校验。
  • 你自己封装的自定义验证特性默认只有服务端验证逻辑,没有实现IClientValidatable接口输出前端验证标记,也没有注册对应的前端验证适配器,因此只有发布页面触发服务端校验时才会生效,前端实时验证不会触发。

解决方案

最简单的适配方式是让你的自定义电话验证特性直接继承RegularExpressionAttribute,复用原生已经实现的客户端验证逻辑,不需要额外开发前端适配器:

public class PhoneNumberAttribute : RegularExpressionAttribute
{
    public PhoneNumberAttribute() : base(@"^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)?\s?\d+)?$")
    {
        ErrorMessage = "Invalid Phone Number";
        // 非必填逻辑和原生保持一致,空值会自动跳过验证
    }
}

如果你的自定义验证逻辑更复杂,无法直接继承RegularExpressionAttribute,则需要两步适配:

  1. 让自定义特性实现IClientValidatable接口,在GetClientValidationRules方法中返回自定义的验证规则和参数,输出到前端DOM的data-*属性中
  2. 在Episerver的前端编辑资源中注册对应的jQuery Validation适配器,绑定自定义规则的前端校验逻辑,完成前后端验证规则的匹配。

内容的提问来源于stack exchange,提问作者Farhin Shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:07