ASP.NET MVC DisplayAttribute и интерфейсы - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть интерфейс и классы

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; }
}

в представлении, которое я пытаюсь использовать, представление является строго типом члена

в этой строке отображается правильное сообщение от DisplayAttribute

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

в этой строке не отображается правильная метка из DisplayAttribute

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

Как это исправить, чтобы в такой архитектуре были правильные метки?

Спасибо

P.S. Я знаю о добавлении DisplayAttribute в поле интерфейса, и все будет работать, но, возможно, есть другое решение.

1 Ответ

1 голос
/ 16 апреля 2010

Все работает, как задумано здесь.

Вы уже знаете свой ответ. Если вы отображаете форму для IRole, вы также должны иметь атрибуты на IRole.


Чтобы иметь правильные метки, вам нужно реализовать свои собственные TypeDescriptors или ModelMetadataProvider, чтобы «соединить» метаданные интерфейса в любые конкретные классы, которые их реализуют.

Это очень быстро станет очень сложно.

Почему вы не можете просто добавить атрибут в интерфейс IRole?

...