【问题标题】:@HTML.editorForModel() doesn't create editing interface for Model@HTML.editorForModel() 不会为模型创建编辑界面
【发布时间】:2013-10-18 13:07:02
【问题描述】:

我有一个模型: 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") 
    }

为什么会这样?

【问题讨论】:

    标签: asp.net-mvc-4 editorformodel


    【解决方案1】:

    这是我向 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 团队

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

    【讨论】:

    • 他们对 MEMBER OF INTERFACE 意味着什么?
    • 我猜这是你的模型实现的接口中定义的属性。
    • 为什么他们的意思是我的类不能继承属性?因为我可以在我的课堂上实现它们!!
    • 它们意味着编辑器和显示助手不考虑在接口中声明的属性(您的类实现没有任何问题)。这是您正在观察的行为。
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多