繁体   English   中英

ASP.net MVC-将具有相同模型类型的EditorFor两次使用

[英]ASP.net MVC - Using EditorFor with the same model type twice

我在MVC中具有以下模型:

public class IndexViewModel
{
    public SubViewModel SubViewModel { get; set; }
}

在我的索引视图中,我正在执行以下操作以显示SubViewModel的编辑器:

Index.cshtml

@model IndexViewModel

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

在我的SubViewModel.cshtml文件中,我尝试执行以下操作:

EditorTemplates / SubViewModel.cshtml

@model SubViewModel

@Html.EditorForModel("SubViewModelForm")

基本上,我想将我的编辑器分为两部分。 第一个编辑器模板将创建表单,而内部的模板将创建所有实际的表单字段。 问题在于内部视图永远不会被渲染。

就像MVC意识到我已经在该模型上调用了EditorFor一样,阻止了我再次执行该操作。 有什么办法可以使它正常工作吗?

编辑

我以为我可以清楚地输入正在发生的事情,但我猜不是。

我想使用两个模板来显示一个模型。 在第一个模板中,我要呈现表单和“提交”按钮以及一些容器div。

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

Index.cshtml @ Html.EditorFor(m => m.SubViewModel)->渲染表单和容器

SubViewModel.cshtml @ Html.EditorForModel(“ SubViewModelForm”)->渲染表单字段

问题是第二个调用(@ Html.EditorForModel(“ SubViewModelForm”))似乎没有任何作用。 它根本不会渲染任何标签。 它被MVC忽略。

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

我相信这与TemplateInfo.Visited方法有关。 简而言之,您不能对同一对象两次使用EditorFor 这就是mvc忽略第二个EditorForModel的原因,因为已经渲染了SubViewModel的编辑器(来自Index.cshtml)。

我不知道这是否是最好的解决方法,但是首先想到的是通过调用Html.Partial将第二个模板呈现为部分视图。

@model SubViewModel

@Html.Partial("SubViewModelForm", Model)

阅读完您的其他详细信息后,我相信最好使用容器模板模板。

/* 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM