Я работаю над проектом С# MVC, и мне нужно передать некоторые данные из контроллера во все представления.
Моя задача состояла в том, чтобы сохранить веб-страницу в файл PDF.
всего 5 страниц, поэтому 5 разных представлений, у меня также есть 5 контроллеров, по одному для каждого представления.
Я создал класс расширения контроллера, поэтому функции внутри него могут использоваться всеми контроллерами.
Поскольку мне нужно отображать представление по-разному, мне нужно передать параметр в каждое представление, чтобы переключить отображение (т.е. если оно предназначено для создания PDF-файла, мне нужно только основное содержимое в представлении без меню и ссылок, в противном случае отобразить все представление .)
Вот моя реализация:
ControllerExtension.cs
public GenerateAllPagesAsPdf
{
bool DisplayMainContentOnly = True;
SaveWebPagetoPDF(MVC.Controller1.Index(DisplayMainContentOnly ), pdf1)
SaveWebPagetoPDF(MVC.Controller2.Index(DisplayMainContentOnly ), pdf2)
SaveWebPagetoPDF(MVC.Controller3.Index(DisplayMainContentOnly ), pdf3)
SaveWebPagetoPDF(MVC.Controller4.Index(DisplayMainContentOnly ), pdf4)
SaveWebPagetoPDF(MVC.Controller5.Index(DisplayMainContentOnly ), pdf5)
DisplayMainContentOnly = False;
}
Контроллер1.cs
[HttpGet]
[Page("View1")]
public virtual ActionResult Index(bool DisplayMainContentOnly)
{
TempData["mainOnly"] = DisplayMainContentOnly;
model1 = new Model();
return this.View(model1);
}
View1.cshtml
@{
bool mainOnly= (bool)TempData["mainOnly"];
}
@if (mainOnly) {
<div>
<h2>@Html.Heading()</h2>
@RenderBody()
</div>
} else {
<div>
<h2>@Html.Heading()</h2>
@RenderBody()
</div>
<div id="mc-column-wrapper">
@Html.Action(MVC.Home.Menu())
</div>
}
И все остальные контроллеры и представления имеют одинаковую реализацию Controller1 и View1, используя каталог TempData для передачи параметра. Я не хочу добавлять эту логическую переменную в каждую модель представлений.
Я попытался установить каталог TempData в своем классе ControllerExtension, но он не передает параметр представлениям
Просто интересно, есть ли другой способ передать параметр всем представлениям вместо того, чтобы передавать его действиям всех контроллеров?
Спасибо