我正在尝试从ValidationAttribute中提取客户端验证规则。有问题的验证器通过使用DataAnnotationsModelValidatorProvider.RegisterAdapter.作为适配器附加的DataAnnotationsModelValidator附加了客户端验证规则
然而,我无论如何也想不出如何在运行时重新获得适配器。任何帮助都将不胜感激。
谢谢,安德鲁
发布于 2012-09-15 02:44:47
您需要使用反射来获取具有属性的属性的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)如果你手头有viewdata的话。您也可以通过显式调用ModelMetadataProvider来获取它。如果你需要更多细节,请告诉我。
发布于 2013-04-12 22:10:35
看看这个示例here -其中的显示模板提取字符串长度验证器(如果存在)并相应地添加html属性。相关代码如下:
IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(ViewData.ModelMetadata, ViewContext);
ModelClientValidationRule stringLengthRule = validators.SelectMany(v => v.GetClientValidationRules()).FirstOrDefault(m => m.ValidationType == "stringLength");https://stackoverflow.com/questions/12428142
复制相似问题