Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在编辑器模板中,调用具有相同模型的另一个编辑器模板_Asp.net Mvc_Razor_Nested_Editortemplates_Display Templates - Fatal编程技术网

Asp.net mvc 在编辑器模板中,调用具有相同模型的另一个编辑器模板

Asp.net mvc 在编辑器模板中,调用具有相同模型的另一个编辑器模板,asp.net-mvc,razor,nested,editortemplates,display-templates,Asp.net Mvc,Razor,Nested,Editortemplates,Display Templates,我有一个编辑器模板,在该编辑器模板中,我想调用具有相同模型(即嵌套)的另一个编辑器模板,但它似乎不显示。 ie.\EditorTemplates\Template1.cshtml @model foo // insert code here to edit the default fields. // display extra fields via another editor template. @Html.EditorForModel("Template2") // or @Htm

我有一个编辑器模板,在该编辑器模板中,我想调用具有相同模型(即嵌套)的另一个编辑器模板,但它似乎不显示。
ie.\EditorTemplates\Template1.cshtml

@model foo

// insert code here to edit the default fields.

// display extra fields via another editor template.
@Html.EditorForModel("Template2")   // or @Html.EditorFor(m => m, "Template2")
和\EditorTemplates\Template2.cshtml

@model foo

@Html.TextBoxFor(m => m.Name)
我相信有人会问为什么?好的,嵌套模板仅在满足条件(即@if(@Model.IsConditionMet){….})时才会显示,但为了简单起见,我将其从原型中删除。

简短回答:

改用
Html.Partial

因此,在Template1.cshtml文件中:

@model foo

// insert code here to edit the default fields.

// display extra fields via another editor template.
@Html.Partial("EditorTemplates/Template2", Model)
长答覆:

不幸的是,这似乎是有意为之。MVC跟踪已渲染的模型,如果模型已由模板渲染,即使模板不同,MVC也不会执行两次。因此,为什么第二个
@Html.EditorForModel(“Template2”)
什么也不做

具体来说,它是在
ViewData.TemplateInfo.VisitedObjects
中跟踪的,这是一个内部字段,因此不希望您在事后修改它。该字段的目的是防止无限递归。高贵,但恼人的是它没有考虑到使用的模板


我通过查看发现了这一点,这非常有助于发现MVC的这些奇怪特性。

我正在尝试做类似的事情,但没有效果。自从你写了这篇文章后,有什么好运气吗?事实上,后续信息:我正试图结合Telerik的MVC网格控制来做这件事。这可能也与此有关。@kdawg-不,没有运气,对不起。我已经开始使用JQuery模板和Knockoutjs.Hah!我在向导控件中使用knockout.js,该控件称为Telerik网格控件。我喜欢那个图书馆。谢谢你的回复。相关/重复:很遗憾我们不能投票给马克作为答案。谢谢你的研究。