Добавление пользовательского атрибута в поле через расширение ValidationAttribute для mvc - PullRequest
0 голосов
/ 29 марта 2012

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

Примерно так:

Модель:

[MyCustomRequiredValidator] <- я хочу добавить его в расширение validationAttribute публичный int? MyField </p>

Я, очевидно, не могу просто добавить его через ModelClientValidationRule, потому что он добавляет к атрибуту префикс data-val, что не очень хорошо, но я не могу получить доступ к самим атрибутам. Я пытался использовать metadata.AdditionValue.add, но без радости.

Атрибут, который я хочу добавить, является aria-required = "true" для поддержки программы чтения с экрана.

Возможно ли это?

Любой совет был бы великолепен, потому что я врезался в стену.

спасибо за поиск.

1 Ответ

1 голос
/ 11 апреля 2012

ОК, так что для чего-то я нашел решение.Я добавил тег к метаданным через все необходимые валидаторы при создании метаданных (я должен был также наследовать интерфейс IMetadataAware в объявлении класса):

public void OnMetadataCreated(ModelMetadata metadata) {
    metadata.AdditionalValues.Add("AriaRequired", "true");
}

Затем я расширил все помощники поля вводачтобы проверить это значение и добавить пользовательский атрибут к входу, проверив наличие вышеуказанного атрибута, в данном случае AriaRequired.

if (htmlAttributes == null) htmlAttributes = new Dictionary<string, object>();

    if (!htmlAttributes.ContainsKey("aria-required"))
    {
        ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        htmlAttributes.Add("aria-required", metaData.IsAriaRequiredValue());
    }
}

Надеюсь, это поможет людям: -)

...