2012-03-29 6 views
0

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

Что-то вроде этого:

модель:

[MyCustomRequiredValidator] < --Я хочу, чтобы добавить его в расширение validationAttribute общественности Int? myField

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

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

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

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

спасибо, что посмотрели.

ответ

1

ОК, поэтому для чего я нашел решение. Я добавил тег в мета-данные через все необходимые валидатор по созданию метаданных (я должен был также наследовать интерфейс 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()); 
    } 
} 

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

Смежные вопросы