1

我正在尝试从 ValidationAttribute 中提取客户端验证规则。有问题的验证器具有通过 DataAnnotationsModelValidator 附加的客户端验证规则,该 DataAnnotationsModelValidator 使用 DataAnnotationsModelValidatorProvider.RegisterAdapter 作为适配器附加。

但是,我一生都无法弄清楚如何在运行时恢复适配器。任何帮助,将不胜感激。

谢谢,安德鲁

4

2 回答 2

0

看一下这个例子-显示模板拉取字符串长度验证器(如果存在)并相应地添加 html 属性。以下是相关代码:

IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(ViewData.ModelMetadata, ViewContext);
ModelClientValidationRule stringLengthRule = validators.SelectMany(v => v.GetClientValidationRules()).FirstOrDefault(m => m.ValidationType == "stringLength");
于 2013-04-12T14:10:34.777 回答
0

您需要使用反射来获取MemberInfo具有属性的属性的对象。然后,

// given memberInfo, controllerContext, and modelMetadata 
// (see below on how to get metadata)
foreach (var attribute in memberInfo.GetCustomAttributes(typeof(ValidationAttribute), true)
{
    var clientValidationAttribute = attribute as IClientValidatable;
    if (clientValidationAttribute == null)
    {
        continue;
    }

    var clientValidationRules = clientValidationAttribute.GetClientValidationRules(modelMetadata, controllerContext);

    // do something with the rules
}

要获取模型元数据,您可以调用

ModelMetadata.FromLambdaExpression(expression, viewData)

如果您有方便的视图数据。您也可以通过显式调用 ModelMetadataProvider 来获取它。如果您需要更多细节,请告诉我。

于 2012-09-14T18:44:47.290 回答