【发布时间】:2014-08-14 02:04:00
【问题描述】:
我有一个实现 IClientValidatable 的自定义 ValidationAttribute。但是永远不会调用 GetClientValidationRules 来将验证规则实际输出到客户端。
该属性没有什么特别之处,但由于某种原因它从未被调用过。我已经尝试在 Application_Start() 中注册一个适配器,但这也不起作用。
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class CustomAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
return true;
}
#region IClientValidatable Members
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
string errorMessage = FormatErrorMessage(metadata.GetDisplayName());
yield return new ModelClientValidationRule { ErrorMessage = errorMessage, ValidationType = "custom" };
}
#endregion
}
public class CustomAdapter : DataAnnotationsModelValidator<CustomAttribute>
{
public CustomAdapter(ModelMetadata metadata, ControllerContext context, CustomAttribute attribute)
: base(metadata, context, attribute)
{
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return this.Attribute.GetClientValidationRules(this.Metadata, this.ControllerContext);
}
}
在 Application_Start() 我有:
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomAttribute), typeof(CustomAdapter));
当我在 GetClientValidationRules 中放置断点时,它永远不会被命中。
【问题讨论】:
-
你使用不显眼的验证吗?如果是,您是否在 web.config 中打开它?您是否将此属性应用于模型的属性?您是否使用标准 mvc Html 助手(如 Html.TextBoxFor)呈现具有此属性的属性?
标签: asp.net asp.net-mvc validationattribute