有没有办法在剃刀视图中解决DTO上的嵌套接口?

时间:2011-09-06 20:17:03

标签: asp.net-mvc-3 razor

我们遇到Razor视图引擎无法解析嵌套接口的问题。示例代码:

public interface IDto
{
    Guid Id {get;set;}
}

public interface IUserDto: IDto
{
  string Username {get;set;}
}

//The view
@model IUserDto

//pukes on this line
@Html.DisplayFor(u => u.Id)

我们应该在观点上使用具体模型吗? Razor视图引擎是否无法为每个模型使用多个接口?

1 个答案:

答案 0 :(得分:2)

这是ASP.NET MVC 3的变化,I already brought to the attention的Microsoft(此场景适用于ASP.NET MVC 1和2)。

这是他们的正式答案:

  

嗨Darin(和其他人),

     

这是我们向ASP.NET MVC 3引入的一个故意改变   是在更好地支持之间进行权衡的结果   继承模型或更好地支持实现的模型   接口。我们最终赞成从我们这里继承的模型   经验是一种更常见的方法。

     

基本问题是当接口由a实现时   类没有真正继承任何成员的类   界面。这里的关键是因为它没有继承   接口的成员,它也不会继承元数据   那些成员。

     

谢谢,ASP.NET团队

现在到了

  

我们应该在观点上使用具体模型吗?

没必要。您仍然可以在主视图上使用接口,但随后具有具体类型的编辑器/显示模板。在运行时,基于视图模型的实际类型,框架将选择正确的模板,您将具有具体类型,并将解析Id属性。

另一种可能性是使用抽象类而不是接口(beurk我知道:-)通常是微软的)