Ответ 1
Короткий ответ:
Используйте 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 отслеживает модели, которые были отображены, и если ваша модель уже была отображена шаблоном, она не будет делать это дважды, даже если шаблон отличается. Следовательно, почему второй @Html.EditorForModel("Template2")
ничего не делает.
В частности, он отслеживается в ViewData.TemplateInfo.VisitedObjects
, который является внутренним полем, поэтому нет никакой надежды на то, что вы измените его после факта. Целью этого поля является предотвращение бесконечной рекурсии. Благородный, но раздражающий тем, что он не учитывает используемый шаблон.
Я нашел это, посмотрев исходный код: http://aspnetwebstack.codeplex.com/, что отлично подходит для поиска этих странных особенностей MVC.