Model Binding找不到的继承接口属性

时间:2011-11-01 14:53:19

标签: c# .net asp.net-mvc-3 razor

我对此问题感到困惑,我不确定这是否是我对MVC框架,.NET框架或其他方面缺乏了解。但是在这里可以理解来自任何角落的一些解释。

我正在尝试做什么:使用ASP.NET MVC3模型绑定在视图中呈现HTML控件。具体来说,我试图绑定到一个接口而不是一个具体的类。

错误:ArgumentException“无法找到属性[blah]。”在页面加载期间抛出。

代码:

Interface IFoundation
{
  int Id { get; set; }
}

Interface IChild: IFoundation
{
  string Name { get; set; }
}

Class Concrete: IChild
{
  int Id { get; set; }
  string Name { get; set; }
}

观点:

@model IChild
@Html.EditorFor(x => x.Id)

当我尝试加载视图时,从对EditorFor()的调用抛出ArgumentException,指出找不到Id属性。但是,如果我改为绑定到Concrete类,绑定工作正常。

所以有人知道为什么EditorFor()无法从基接口解析继承的属性吗?

1 个答案:

答案 0 :(得分:8)

在基础/抽象和具体类中,存在属性,方法等。另一方面,实现了接口。 CLR强加的规则。

请参阅此文章,了解有关此差异的ModelBinding和关系(Class x Interface)。

http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html

我认为这是你的答案。