【问题标题】:Validation using IClientModelValidator使用 IClientModelValidator 进行验证
【发布时间】:2016-12-29 00:30:29
【问题描述】:

在以前的版本 (RC1) 中,我使用接口 IClientModelValidator 来验证/比较密码并使用 'ModelClientValidationEqualToRule' 类确认密码,如下所示

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context)
    {
        String strMsg = AccessLocalization.GetString(_resourceID);

        var modelClientValidationEqualToRule = new ModelClientValidationEqualToRule(strMsg, _OtherPropertyName);

        yield return modelClientValidationEqualToRule;
    }

在 jQuery 中

  $.validator.addMethod("equalto",
   function (value, element, parameters) {
       return value;

   });

    $.validator.unobtrusive.adapters.add('equalto', [], function (options) {

        options.rules.equalto = {};
        options.messages['equalto'] = options.message;
    });

但是,现在我使用的是 .Net Core 1.0,其中此接口已完全更改,并且没有可用的“ModelClientValidationEqualToRule”类。

阅读documentation 后,我知道验证将在数据属性的帮助下完成。所以,到目前为止,我已经实现了必填字段属性、范围字段属性、电子邮件地址属性等。

但是,我不清楚如何验证密码和确认密码?

对此的任何帮助表示赞赏!

【问题讨论】:

  • 你为什么还在使用RC2?我会尽力帮助你,但我认为 RC2 和 1.0 之间也有变化。最好将您的项目迁移到 1.0,然后重新审视任何问题以使事情正常进行,而不是尝试解决 RC2 上的问题,然后可能需要在 1.0 中再次解决它们
  • @JoeAudette 哦.. 对不起我的错字。我正在使用 .net core 1.0 本身。我已经更新了我的问题
  • 您是自己实现自定义验证器还是只是尝试使用内置的比较验证器?只要您在页面中包含 jquery.validate.unobtrusive.min.js,内置的比较验证器应该已经可以与客户端验证一起使用
  • 如果您正在实现自定义验证器,我可以向您展示如何实现 IClientModelValidator 的示例
  • @JoeAudette.. 是的,请.. 我会很高兴的!

标签: jquery asp.net-core asp.net-core-mvc asp.net-core-1.0


【解决方案1】:

IClientModelValidator 只有一种方法可以实现,此处显示的示例来自自定义 EnforceTrueValidator,如果存在必需的注册协议,我使用它有条件地强制检查注册页面上的复选框。此方法添加所需的数据属性以连接客户端不显眼的验证。

    public void AddValidation(ClientModelValidationContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        CheckForLocalizer(context);
        var errorMessage = GetErrorMessage(context.ModelMetadata.GetDisplayName());
        MergeAttribute(context.Attributes, "data-val", "true");
        MergeAttribute(context.Attributes, "data-val-enforcetrue", errorMessage);
        MergeAttribute(context.Attributes, "data-val-other", "#" + OtherProperty);
    }

可以看到完整类here,自定义客户端验证也必须添加到页面的自定义js是here

在我的情况下,“其他”属性只是一个布尔值,我用来确定是否应该应用此验证器,因为我在多租户场景中使用它并且并非所有租户都可以强制执行注册协议,我将布尔值设置为 true如果租户填写了注册协议

【讨论】:

  • 自定义客户端验证的链接已关闭。
  • @Taraz 感谢您告诉我,我已修复链接,文件已移至其他项目。
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 2013-01-13
  • 2016-09-09
  • 2012-06-23
  • 2014-03-18
  • 2012-01-21
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多