Short answer:
Use Html.Partial
instead.
So, in your Template1.cshtml file:
@model foo
// insert code here to edit the default fields.
// display extra fields via another editor template.
@Html.Partial("EditorTemplates/Template2", Model)
Long answer:
This sadly appears to be by-design. MVC tracks the models that have been rendered, and if your model has already been rendered by a template, it won't do it twice, even if the template is different. Hence why the second @Html.EditorForModel("Template2")
just does nothing.
Specifically, it's tracked in ViewData.TemplateInfo.VisitedObjects
, which is an internal field, so there's no hope in you modifying it after the fact. The intention of this field is to prevent infinite recursion. Noble, but annoying in that it doesn't take the template used into account.
I found this out by looking at the source code, which is great for finding these weird idiosyncrasies of MVC.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…