ASP.NET MVC DisplayAttribute和接口

时间:2010-04-16 12:18:46

标签: asp.net-mvc data-annotations

我有一些界面和类

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

on View我尝试使用,View是强类型的成员

此行上的

显示来自DisplayAttribute

的正确消息
<%= Html.LabelFor(m => m.Login) %>

在此行上,它不会显示DisplayAttribute

中的正确标签
<%= Html.LabelFor(m => m.Role.Name) %>

如何解决此问题,以便在此类架构中使用正确的标签?

由于

P.S。我知道将DisplayAttribute添加到接口字段并且一切都可以工作,但也许有不同的解决方案。

1 个答案:

答案 0 :(得分:1)

一切都按照这里设计的方式运作。

你已经知道答案了。如果您显示IRole的表单,则还必须具有IRole上的属性。


为了获得正确的标签,您必须实现自己的TypeDescriptors或ModelMetadataProvider,以便将接口的元数据“刷新”到任何实现它们的具体类中。

这将真正变得非常复杂。

为什么不能将属性添加到IRole接口?