2010-09-24 3 views
1

Я пытаюсь точно определить, какую роль играют атрибуты при использовании свойств модели.Как работают атрибуты в MVC2

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

public class Customer { 

     [DisplayName("Customer Name")] 
     public string Name { get; set; } 
    } 

< /Shared/DisplayTemplates/String.ascx --- Использует этот

<p><%=Model %> | <%=ViewData.ModelMetadata.DisplayName %></p> 

-

Если же изменить атрибут DisplayName к ТипДанному, то MVC выглядит для шаблона также называемый ImageUrl.

public class Customer { 
     [DataType(DataType.ImageUrl)] 
     public string Name { get; set; } 
    } 

< /Shared/DisplayTemplates/ImageUrl.ascx --- Использует этот

<img href="<%=Model %>" /> | <%=ViewData.ModelMetadata.DisplayName %> 

Почему шаблон строки игнорируются? Я думал, что MVC сопоставляет типы данных свойств с именами шаблонов (например, первый пример), а атрибуты используются как метаданные в шаблонах.

Это все очень смущает!

ответ

1

MVC соответствует типу объекта при поиске шаблона - как в вашем первом примере.

В вашем втором примере ваш атрибут [DataType] переопределил определение строки, поэтому теперь он ищет шаблон с именем, аналогичным типу данных.

Если вы хотите, чтобы указать, какой шаблон свойство будет использовать вы можете использовать атрибут UIHint

public class Customer { 
     [UIHint("string")] 
     [DataType(DataType.ImageUrl)] 
     public string Name { get; set; } 
    } 
Смежные вопросы