ASP.net MVC-对同一型号使用EditorFor两次

ASP.net MVC-对同一型号使用EditorFor两次,.net,asp.net-mvc,mvc-editor-templates,.net,Asp.net Mvc,Mvc Editor Templates,我在MVC中有以下模型: public class IndexViewModel { public SubViewModel SubViewModel { get; set; } } 在我的索引视图中,我执行以下操作来显示子视图模型的编辑器: Index.cshtml @model IndexViewModel @Html.EditorFor(m => m.SubViewModel) @model SubViewModel @Html.EditorForModel("Sub

我在MVC中有以下模型:

public class IndexViewModel
{
    public SubViewModel SubViewModel { get; set; }
}
在我的索引视图中,我执行以下操作来显示子视图模型的编辑器:

Index.cshtml

@model IndexViewModel

@Html.EditorFor(m => m.SubViewModel)
@model SubViewModel

@Html.EditorForModel("SubViewModelForm")
在我的
SubViewModel.cshtml
文件中,我尝试执行以下操作:

EditorTemplates/SubViewModel.cshtml

@model IndexViewModel

@Html.EditorFor(m => m.SubViewModel)
@model SubViewModel

@Html.EditorForModel("SubViewModelForm")
基本上,我想把我的编辑器分成两部分。第一个编辑器模板将创建表单,内部模板将创建所有实际表单字段。问题是内部视图永远不会被渲染

这就像MVC意识到我已经在那个模型上调用了EditorFor,并且阻止我再次这样做。有什么办法可以让它工作吗

编辑

我以为我把发生的事情清楚地打印出来了,但我想没有

我想使用两个模板来显示单个模型。在第一个模板中,我希望呈现表单和submit按钮,以及一些容器div

在第二个模板中,我希望呈现所有表单字段

Index.cshtml @EditorFor(m=>m.SubViewModel)-->呈现表单和容器

SubViewModel.cshtml @EditorForModel(“SubViewModelForm”)-->呈现表单字段

问题是,第二个调用(@Html.EditorForModel(“SubViewModelForm”))似乎什么也做不了。它从不呈现任何标记。它被MVC忽略了


我之所以想这样做,是因为我将通过ajax调用发布此表单。如果一切正常(模型状态有效),那么我希望将JSON数据返回到视图。如果模型无效,我希望返回仅包含表单字段的局部视图。这样,我就不需要再次连接所有事件处理程序。我可以只替换表单字段而不是整个视图。

在阅读了您的其他详细信息后,我认为最好使用容器模板

/* Container.cshtml (container markup and call to editor template) */
<fieldset>                    
    @Html.EditorForModel()
</fieldset>

/* SubViewModel.cshtml editor template */
@model SubViewModel

@Html.DisplayFor(x => x.Property1)
@Html.EditorFor(x => x.Property1)
...

/* Index.cshtml */
@Html.RenderPartial("Container.cshtml", Model.SubViewModel)
/*Container.cshtml(容器标记和对编辑器模板的调用)*/
@Html.EditorForModel()
/*SubViewModel.cshtml编辑器模板*/
@模型子视图模型
@DisplayFor(x=>x.Property1)
@Html.EditorFor(x=>x.Property1)
...
/*Index.cshtml*/
@RenderPartial(“Container.cshtml”,Model.SubViewModel)

我相信这与方法有关。简单地说,您不能对同一对象使用两次
EditorFor
。这就是为什么mvc会忽略您的第二个编辑器ForModel,因为SubViewModel的编辑器已经呈现(来自Index.cshtml)

我不知道这是否是最好的解决方法,但首先想到的是通过调用


具体发生了什么?您的模型在SubViewModel.cshtml中是null还是…?此问题可以通过重新创建ViewData.TemplateInfo来解决。看,是的,我用了一个部分。我希望我能绕开这一点,因为我想保持在同一个地方的意见。看起来我可能不得不重新使用分部代码了。我今天也被它卡住了。谢谢你的回答。+1是的,我认为你不想在索引中使用EditorFor。请使用本答案中所述的部分答案。