Ненавязчивая проверка MVC3 не работает для пользовательского атрибута DataAnnotations - PullRequest
2 голосов
/ 09 августа 2011

У меня есть пользовательский атрибут, который в настоящее время является простой оболочкой 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 Ответ

4 голосов
/ 09 августа 2011

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

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

        yield return modelClientValidationRule;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...