MVC3 ненавязчивая проверка не работает для пользовательского атрибута DataAnnotations
У меня есть пользовательский атрибут, который в настоящее время является простой оболочкой DataAnnotations.RequiredAttribute (я расширю его позже, но просто пытаюсь получить это доказательство концепции, работающей сейчас). Однако это не работает с ненавязчивой проверкой MVC3.
На самом деле это очень простая проблема.Вот мой пользовательский атрибут:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
public RequiredAttribute()
{
}
public RequiredAttribute(Type errorMessageResourceType, string errorMessageResourceName)
{
this.ErrorMessageResourceName = errorMessageResourceName;
this.ErrorMessageResourceType = errorMessageResourceType;
}
}
Вот два свойства модели, одно из которых использует пользовательский атрибут, другое-атрибут DataAnnotations:
[System.ComponentModel.DataAnnotations.Required]
public string FirstName { get; set; }
[CustomValidationAttributes.Required]
public string LastName { get; set; }
Вот код бритвы:
<p>
@Html.TextBoxFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</p>
<p>
@Html.TextBoxFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</p>
И вот результат:
<p>
<input type="text" value="" name="FirstName id="FirstName" data-val-required="The First Name field is required." data-val="true">
<span data-valmsg-replace="true" data-valmsg-for="FirstName" class="field-validation-valid"></span>
</p>
<p>
<input type="text" value="" name="LastName" id="LastName">
<span data-valmsg-replace="true" data-valmsg-for="LastName" class="field-validation-valid"></span>
</p>
Итак, как вы можете видеть, FirstName (с помощью DataAnnotations) отображается с необходимыми атрибутами html, необходимыми для валидаторов, но LastName (с помощью CustomValidationAttributes) отсутствует data-val-required
и data-val attributes
.
Я делаю что-то неправильно, или это не поддерживается ненавязчивой проверкой MVC3?
Заранее благодарю.
1 ответ:
Как Инго указал выше в комментариях, мне пришлось реализовать
IClientValidatable
, чтобы они работали. Итак, в моем примере выше, я должен был добавить это к моему атрибуту:public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var modelClientValidationRule = new ModelClientValidationRule { ErrorMessage = FormatErrorMessage(metadata.DisplayName), ValidationType = "required" }; yield return modelClientValidationRule; }