爲了能在自定義客戶端驗證屬性,你可以實現你的屬性IClientValidatable
接口:
public class requiredAttribute : ValidationAttribute, IClientValidatable
{
...
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new[] { new ModelClientValidationRule { ErrorMessage = "<Your error message>", ValidationType = "required" } };
}
}
作爲替代方案可以實現驗證適配器的屬性:
public class requiredAttributeAdapter : DataAnnotationsModelValidator<requiredAttribute>
{
public requiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute)
: base(metadata, context, attribute)
{ }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new[] { new ModelClientValidationRule { ErrorMessage = "<Your error message>", ValidationType = "required" } };
}
}
並在Global.asax中用數據註釋驗證引擎註冊它:
protected void Application_Start()
{
...
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(requiredAttribute), typeof(requiredAttributeAdapter));
}
當然,你需要確保你在上面的類中引用了你的屬性。
因此,在本例中(來自本書)'data-val =「true」data-val-length =「字段ClientName 必須是最小長度爲3,最大長度爲10的字符串。 data-val-lengthmax =「 10」data-val-length-min =「3」data-val-required =「客戶端名稱字段是必需的。」我必須知道哪些數據val屬性存在,並且當框架改變它的行爲時(可能會添加/刪除'data-val'屬性),監視它並在我們自己的代碼中實現它們? – Michel
'data-val'屬性將由HTML助手(如TextBoxFor)自動生成,假定您的裝飾的自定義驗證屬性相應的視圖模型屬性滿足我在我的答案中提出的兩個條件之一。 –