0

我有一个模型:Menu 是 menuComponent 的子类

并且菜单组件有两个属性:名称和描述都是字符串

我创建了一个编辑视图并尝试使用 editorForModel() 创建编辑字段。但它不会为它创建任何编辑字段。

@using (Html.BeginForm())
{ 
    @Html.EditorForModel();
    <input type="submit" value="Save" /> 
    @Html.ActionLink("Cancel and return to List", "Index") 
}

我必须使用 @HTML.EditorFor() 来创建编辑文件

 @using (Html.BeginForm())
    { 
        @Html.EditorFor(m => m.Name);
        @Html.EditorFor(m => m.Description);
        <input type="submit" value="Save" /> 
        @Html.ActionLink("Cancel and return to List", "Index") 
    }

为什么会这样?

4

1 回答 1

2

这是我向 Microsoft 报告的错误:http ://connect.microsoft.com/VisualStudio/feedback/details/636341/modelmetadata-fromlambdaexpression-has-changed-in-asp-net-mvc-3-rtm

基本上,编辑器和显示模板只查找模型当前类型的属性,而不是父类中的属性。

他们的官方回答是这样的:

嗨达林(和其他人),

这是我们在 ASP.NET MVC 3 中引入的有意更改,这是在更好地支持继承模型或更好地支持实现接口的模型之间进行权衡的结果。我们最终倾向于继承模型,根据我们的经验,这是一种更常见的方法。

根本问题是,当一个接口由一个类实现时,该类并没有真正继承接口的任何成员。这里的关键是因为它不继承接口的成员,所以它也不继承那些成员的元数据。

谢谢, ASP.NET 团队

所以基本上他们不认为这是一个错误,而是设计使然。

于 2013-10-18T13:18:18.923 回答