Как сделать содержимое представления «выше RenderBody» и «ниже RenderBody» доступным в виде отдельных файлов «header» и «footer»? - PullRequest
0 голосов
/ 14 февраля 2019

Примечание. Я разобрался с решением, прежде чем опубликовать этот вопрос, поэтому я отвечу самому себе своим решением.

У меня есть веб-сайт .NET MVC, использующий набор представленийв иерархии, передавая данные друг другу через Section и RenderSection.У меня есть одно представление верхнего уровня, называемое «Master», с несколькими унаследованными от него представлениями.

У меня есть два разных внешних приложения, которые мне нужны, чтобы иметь возможность динамически импортировать «внешний шаблон» веб-сайта MVC какотдельные файлы верхнего и нижнего колонтитула, соответствующие коду выше и ниже строки RenderBody представления верхнего уровня, соответственно.

Как я могу настроить все, чтобы я мог сохранить свою структуру иерархического представления в приложении MVC, а также предоставить эти отдельные файлы кода верхнего и нижнего колонтитула внешним приложениям?

Я пробовалперемещение кода Master.cshtml выше и ниже RenderBody в частичные представления Header и Footer с целью использования этих частичных представлений как в Master.cshtml, так и в новых файлах Header.cshtml и Footer.cshtml, предназначенных для использования внешними приложениями.Проблема в том, что я не нашел способа заставить эту работу работать со строками RenderSection, которые смешаны с кодом Master.cshtml.

1 Ответ

0 голосов
/ 14 февраля 2019

Вот решение, которое я нашел:

В Master.cshtml:

ViewDataDictionary globalHeaderData = new ViewDataDictionary {
    {"sectionName1", RenderSection("sectionName1", false)},
    {"sectionName2", RenderSection("sectionName2", false)},
};

ViewDataDictionary globalFooterData = new ViewDataDictionary {
    {"sectionName3", RenderSection("sectionName3", false)},
    {"sectionName4", RenderSection("sectionName4", false)},
};

@Html.Partial("GlobalHeader", Model, globalHeaderData)
@RenderBody()
@Html.Partial("GlobalFooter", Model, globalFooterData)

Затем в GlobalHeader и GlobalFooter замените каждую строку RenderSection следующим:

@ViewData["theSectionName"]

Вот и все!

...