首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取MVC验证属性适配器

获取MVC验证属性适配器
EN

Stack Overflow用户
提问于 2012-09-15 00:03:30
回答 2查看 1.1K关注 0票数 1

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

然而,我无论如何也想不出如何在运行时重新获得适配器。任何帮助都将不胜感激。

谢谢,安德鲁

EN

回答 2

Stack Overflow用户

发布于 2012-09-15 02:44:47

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

代码语言:javascript
复制
// 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
}

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

代码语言:javascript
复制
ModelMetadata.FromLambdaExpression(expression, viewData)

如果你手头有viewdata的话。您也可以通过显式调用ModelMetadataProvider来获取它。如果你需要更多细节,请告诉我。

票数 0
EN

Stack Overflow用户

发布于 2013-04-12 22:10:35

看看这个示例here -其中的显示模板提取字符串长度验证器(如果存在)并相应地添加html属性。相关代码如下:

代码语言:javascript
复制
IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(ViewData.ModelMetadata, ViewContext);
ModelClientValidationRule stringLengthRule = validators.SelectMany(v => v.GetClientValidationRules()).FirstOrDefault(m => m.ValidationType == "stringLength");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12428142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档