自定义验证属性不触发 jQuery 验证

Posted

技术标签:

【中文标题】自定义验证属性不触发 jQuery 验证【英文标题】:Custom Validate Attribute not triggering jQuery validate 【发布时间】:2019-07-15 17:46:40 【问题描述】:

我正在努力找出自定义验证属性的问题,以及为什么它与非自定义验证属性的行为不同。

我已经设置了一个非常基本的自定义验证属性作为示例:

public class AlwaysFalse : ValidationAttribute, IClientValidatable

    public IEnumerable<ModelClientValidationRule> 
GetClientValidationRules(ModelMetadata metadata, ControllerContext 
context)
    
        yield return new ModelClientValidationRule
        
            ErrorMessage = this.ErrorMessage,
            ValidationType = "alwaysfalse"
        ;
    

    protected override ValidationResult IsValid(object value, 
ValidationContext validationContext)
    
        return new ValidationResult("Error");
    

我已将该属性应用于我的模型中的一个属性。

我写的自定义js如下:

jQuery.validator.addMethod('falseMethod', function (value, element, 
params) 
        return false;
, '');

// and an unobtrusive adapter
jQuery.validator.unobtrusive.adapters.add('alwaysfalse', , function 
(options) 
    options.rules['falseMethod'] = true;
options.messages['falseMethod'] = options.message;
);

我已遵循以下帖子中的建议: Perform client side validation for custom attribute

当我调用我的控制器 POST 函数时,验证会正常进行。但是我希望它被触发类似于其他validationAttributes。例如,我还在我的一个模型属性上设置了范围验证属性,一旦我在此字段中输入无效信息,就会将“input-validation-error”类分配给相关的输入字段。

任何帮助/协助将不胜感激。

如果我可以提供更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

好的,现在回答这个问题。

我对 C# 很陌生,并没有意识到将 asp.NET 核心作为我的目标框架和尝试使用 .Net 类之间的区别。

我还收到有关 Web.MVC 类未按预期工作的警告。

论坛帖子解决了我的问题: ASP.Net Core MVC - Client-side validation for custom attribute

更改为使用 Microsoft.AspNetCore.Mvc.ModelBinding.Validation 的 IClientModelValidator 类;

【讨论】:

以上是关于自定义验证属性不触发 jQuery 验证的主要内容,如果未能解决你的问题,请参考以下文章

自定义客户端验证 jQuery 适配器不会在 ASP.Net Core 中触发

自定义验证不触发客户端

jQuery Unobtrusive 客户端验证自定义属性

Acumatica:触发器在另一个自定义按钮上保存验证

VueJS 自定义道具验证功能

Web API 验证不使用自定义模型绑定器触发