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 2

1 ответ:

Как Инго указал выше в комментариях, мне пришлось реализовать IClientValidatable, чтобы они работали. Итак, в моем примере выше, я должен был добавить это к моему атрибуту:

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.DisplayName),
            ValidationType = "required"
        };

        yield return modelClientValidationRule;
    }