Asp.net mvc 3 有没有办法在razor视图中解析DTO上的嵌套接口?

Asp.net mvc 3 有没有办法在razor视图中解析DTO上的嵌套接口?,asp.net-mvc-3,razor,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) 我们应该在我们的观点上使用具体的模型吗?Ra

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 view引擎是否不能在每个模型上使用多个接口?

这是ASP.NET MVC 3与Microsoft的不同之处(此方案适用于ASP.NET MVC 1和2)

以下是他们的官方答案:

嗨,达林(和其他人)

这是我们在ASP.NET MVC 3中引入的经过深思熟虑的更改 这是在获得更好的支持和支持之间进行权衡的结果吗 继承模型或更好地支持实现 接口。我们最终倾向于继承的模型,这是从我们的 经验是一种更常见的方法

基本问题是,当接口由 类,该类实际上不继承其任何成员 界面。这里的关键是,因为它不继承 接口的成员,它也不会继承上的元数据 那些成员

谢谢,ASP.NET团队

现在开门见山

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

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


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

你能详细解释一下你的意思吗?你说的是自定义模板吗?@DDiVita,是的,我说的是自定义编辑器/显示模板。界面太糟糕了……当我明白他们说的话时,我不确定我是否同意。@DDiVita,我也是,这就是我发布此错误报告的原因。