2013-07-23 14 views
0

У меня есть свойство CountryText, которые содержат текст, чтобы показать страну собственности, поэтому мне нужно сделать somehing так:дисплей DataAnnotation зависит от другого имущества MVC4

[Display(Name=CountryText)] 
     public string Country { get; set; } 
     public string CountryText { get; set; } 

Как я могу это сделать, пожалуйста ??

+0

отображаемое_имя постоянно, так что вы можите Ставить когда приложение работает/Есть примеры того, что вы можете сделать с дисплеем в этой ссылке http://msdn.microsoft.com /en-us/library/dd901590(v=vs.95).aspx –

ответ

0

ОБНОВЛЕНИЕ: Невозможно это сделать.

Вам понадобится специальный атрибут для украшения ваших свойств и пользовательский поставщик метаданных модели (обычно унаследованный от DataAnnotationsModelMetadataProvider, который по умолчанию используется в приложениях MVC). Пользовательский поставщик будет необходимо установить метаданные, определенные в вашем настраиваемом атрибуте.

Проблема в том, что вы не можете получить доступ к модели от поставщика метаданных модели. Вы можете получить информацию о типах (тип модели, тип контейнера, атрибуты ...), но не конкретный экземпляр модели, поэтому вы не можете получить значение свойства и использовать его в провайдере.

Alternative

Однако вы можете использовать Html.Label, чтобы показать название поля.

Если вы хотите сделать его более «автоматическим», вы можете написать собственный html-помощник, который создает ярлык для вас. Этот помощник имеет полный доступ к типу модели и содержанию модели, поэтому вы все равно можете использовать пользовательский атрибут, искать его в html-хелпер-коде и использовать содержимое другого свойства.

Если бы это было возможно с поставщиком метаданных

Ваш пользовательский поставщик метаданных должны добавить все neccesary metadata для свойства вид модели. Этот поставщик метаданных может быть основан на соглашениях или использовать специальные атрибуты для добавления дополнительной информации.

Эти записи в блоге объясняют, как реализовать пользовательский атрибут и поставщик метаданных.

+0

в пользовательском displayName, как я могу получить значение моего свойства DisplayNameProperty ?? – user1428798

+0

Вы должны использовать Reflection. У вас есть все доступные модели. Вы можете найти свойство своей модели путем отражения. Что-то вроде этого: Тип modelType = model.GetType(); PropertyInfo prop = modelType.getProperty (...); string title = prop.GetValue (модель, null) .ToString(); (Это наизусть. Возможно, это не точно, но очень похоже на то, что вам нужно делать). – JotaBe

+0

У меня нет модели в моем customDisplayName – user1428798

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