2010-09-22 8 views
15

J'utilise MVC2 pendant un certain temps maintenant, et quand je dois définir le modèle i utilise le DataType attributDataType vs UIHint

[DataType("DropDown")] 
    public int Field { get; set; } 

Je vois d'autres en utilisant UIHint pour obtenir les mêmes résultats

[UiHint("DropDown")] 
    public int Field { get; set; } 

Quelle est la différence entre l'utilisation de ces deux attributs? Quel attribut dois-je utiliser normalement ou est-ce pour différentes tâches?

Répondre

22

DataType est généralement utilisé pour indiquer qu'il s'agit d'une version très spécifique d'une propriété, telle que le prix.

L'exemple le plus courant de DataType est le [DataType(DataTypes.EmailAddress)] qui est généralement une chaîne mais nous disons qu'il s'agit d'un type de chaîne très spécifique.

Ils sont tous les deux utiles et l'UIHint remplace le DataType. Donc, si vous avez un certain DataType mais que vous voulez remplacer l'éditeur pour cette propriété spécifique, vous pouvez utiliser un UIHint.

1

attribut DataType a deux objectifs

  • Fournir des informations de type supplémentaire pour un champ de données. Pour ce faire, appliquez l'attribut DataTypeAttribute à un champ de données du modèle de données et spécifiez le nom de type supplémentaire à partir de l'énumération DataType. Ensuite, le moteur de vue utilise le modèle par défaut pour afficher la propriété, par exemple, une case à cocher pour un booléen.
  • Si vous souhaitez remplacer le modèle par défaut et que vous souhaitez utiliser un modèle personnalisé, vous pouvez l'utiliser pour associer un modèle de champ personnalisé à ce champ de données. Dans ce cas, vous devez fournir une page partielle [.cshtml, MVC 4] pour décrire l'affichage.
  • Le but de UIHint est exactement le même que le deuxième point ci-dessus. Où utiliser quoi? La réponse est: contexte, c'est-à-dire, ce qui aura plus de sens, ce qui est plus proche du problème physique que votre code tente de résoudre. Et si les deux sont appliqués à la même propriété? La réponse est: UIHint a la priorité, évidemment. Mais pourquoi appliqueriez-vous les deux?