2010-09-24 6 views
1

J'essaie de définir exactement le rôle joué par les attributs lorsqu'ils sont utilisés dans les propriétés du modèle. Par exemple, si j'ai un modèle client avec un attribut de nom d'affichage défini sur l'une des propriétés, alors je peux accéder à la valeur d'attribut de nom d'affichage dans un modèle d'affichage pour une raison quelconque.Comment fonctionnent les attributs dans MVC2

public class Customer { 

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

/Shared/DisplayTemplates/String.ascx < --- utilise ce

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

-

Si toutefois je change l'attribut DisplayName à DataType, puis MVC cherche un modèle aussi appelé ImageUrl.

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

/Shared/DisplayTemplates/ImageUrl.ascx < --- utilise ce

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

Pourquoi le modèle de chaîne ignorée? Je pensais que MVC correspond les types de données des propriétés aux noms de modèles (comme le premier exemple) et les attributs sont utilisés comme métadonnées dans les modèles.

Tout est très déroutant!

Répondre

1

MVC correspond au type de données de la propriété lorsque vous recherchez un modèle, comme dans votre premier exemple.

Dans votre deuxième exemple, votre attribut [DataType] a outrepassé la définition de la chaîne. Il recherche donc un modèle portant le même nom que le type de données.

Si vous voulez spécifier quel modèle une propriété utilisera vous pouvez utiliser l'attribut UIHint

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