2010-04-16 6 views
0

I ont une interface et des classesASP.NET MVC DisplayAttribute et les interfaces

public inteface IRole 
{ 
    int Id { get; } 
    string Name { get; set; } 
} 

public class Role : IRole 
{ 
    public int Id { get; } 
    [Display("Role Name")] 
    public string Name { get; set; } 
} 

public class Member 
{ 
    [Display("Login")] 
    public string Login { get; set; } 
    [Display("Password")] 
    public string Password { get; set; } 
    public IRole Role { get; set; } 
} 

sur View J'essaie d'utiliser, View est fortement type de membre

sur cette ligne affiche un message correct de DisplayAttribute

<%= Html.LabelFor(m => m.Login) %> 

sur cette ligne, il ne présente pas l'étiquette correcte de DisplayAttribute

<%= Html.LabelFor(m => m.Role.Name) %> 

Comment puis-je corriger cela pour avoir des étiquettes correctes dans une telle architecture?

Merci

P.S. Je sais ajouter DisplayAttribute au champ d'interface et tout fonctionnera, mais il y a peut-être une solution différente.

Répondre

1

Tout fonctionne comme conçu ici.

Vous connaissez déjà votre réponse. Si vous affichez un formulaire pour IRole, vous devez également avoir les attributs sur IRole.


Afin d'avoir les bonnes étiquettes que vous auriez à mettre en œuvre vos propres TypeDescriptors ou ModelMetadataProvider pour « Smush » ensemble les métadonnées d'une interface dans toutes les classes concrètes qui les mettent en œuvre.

Cela va devenir vraiment complexe très rapidement. Pourquoi ne pas simplement ajouter l'attribut à l'interface IRole?