MVC 4 Html.EditorFor无效

时间:2013-04-12 13:14:19

标签: asp.net-mvc-4

我想使用反射显示编辑页面,循环浏览对象的所有属性,并为每个属性创建正确的编辑控件。 我的视图看起来很好,我运行应用程序和编辑控件按预期显示,但是,我想要编辑id = 4的对象,通常我应该在页面上这个对象一次使用编辑控件对于每个属性,问题是我不止一次得到同一个对象,该对象在页面上重复多次,具有相同的控件和属性。我在这里错过了什么吗?

...
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Test</legend>
        <table>
        @{
            var props = Model.GetType().GetProperties();}
            @foreach (var prop in props)
            {
                <tr>
                    <td><div>@Html.EditorFor(model => Model, prop.GetValue(Model, null))</div></td>
                </tr>                                
            }
        </table>
    </fieldset>
}
...

1 个答案:

答案 0 :(得分:3)

EditorFor帮助器的第二个参数根本没有做到你认为它做的事情。您似乎试图为其提供一个值,并期望此值将显示在生成的文本框中,但这不是该参数的用途。此参数称为additionalViewData,顾名思义允许您将自定义附加视图数据传递给编辑器模板。但是,如果您没有自定义编辑器模板对此视图数据执行某些有用的操作,那么您不会指望会发生太多事情。

我建议您阅读following blog post以更好地熟悉ASP.NET MVC中的模板。

但是要真正回答您的问题,您似乎正在尝试编写一个自定义模板,该模板将呈现您对象的每个属性。您可以编写一个自定义编辑器模板来完成这项工作。布拉德·威尔逊在following post中阐述了这个概念(在文章的最后看一下浅水潜水与深潜部分)。