Могу ли я вызвать «общий» шаблон редактора из шаблона «областей» для той же модели? - PullRequest
8 голосов
/ 17 ноября 2011

У меня есть расположение шаблона редактора в:

Области / Сообщения / Представления / Общий доступ / EditorTemplates / Question.cshtml

У меня также есть один в:

/ Представления / Shared / EditorTemplates / Question.cshtml

Для обоих модель одинакова.

Чтоя пытаюсь сделать это в представлении в области Posts, вызвать мой шаблон редактора в области, установить некоторый HTML и затем вернуться обратно к основному общему шаблону редактора.

Вот Posts EditorTemplate:

@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.EditorForModel()

Но все, что он делает, это отрисовывает скрытое поле, а не содержимое общего шаблона редактора.

Если я избавлюсь от Posts шаблона редактора,общий отображается правильно.

Я предполагаю, что MVC / Razor думает, что это рекурсивно или что-то в этом роде?Как я звоню по тому же шаблону?

Есть ли какой-нибудь способ, которым я могу сказать, чтобы он пошел к общему?

По сути, я пытаюсь повторно использовать HTML в общем шаблоне, но добавьте свой собственный хитрый HTML.

Ответы [ 2 ]

10 голосов
/ 17 ноября 2011

У вас может быть только 1 шаблон, используемый во время выполнения для данного типа.ASP.NET MVC сначала просматривает папку общих шаблонов областей, и, поскольку он находит там соответствующий шаблон, он берет его и использует.Затем он перестает искать, и шаблон, который вы помещаете в основную общую папку, никогда не используется.Это по своему замыслу.

Есть ли какой-нибудь способ, которым я могу сказать, чтобы он пошел к общему?

Да, вы можете явно указать местоположение шаблона, нотогда он не будет использовать шаблон в вашей папке областей:

@Html.EditorFor(x => x.Question, "~/Views/Shared/EditorTemplates/Question.cshtml")
2 голосов
/ 18 ноября 2011

Поскольку разметка HTML для шаблона редактора shared была очень простой (просто отображал флажок и метку), я абстрагировал разметку в специальный помощник HTML, а затем вызвал ее из общего шаблона и шаблон моих областей.

~/Areas/Posts/Views/Shared/EditorTemplates/Question.cshtml:

@model xxx.ViewModels.QuestionViewModel
@Html.Hidden("Id", (byte)Model.QuestionType)
@Html.QuestionCheckBoxForModel()
@Html.QuestionLabelForModel()

~/Views/Shared/EditorTemplates/Question.cshtml:

@model xxx.ViewModels.QuestionViewModel
@Html.QuestionCheckBoxForModel()
@Html.QuestionLabelForModel()
...