Каким способом в .NET Core рекомендуется заполнять мастер страницу (_Layout.cshtml) динамическим контентом?

Использую Razor pages из Core 2.0.
Задача состоит в том, чтобы для каждой страницы, которая использует этот Layout выполнялись бы определенные методы некого класса. Например, в шапке страницы нужно отобразить счетчик уведомлений, и нужно чтобы каждый раз он пересчитывался. Для этого нужно создать соединение с БД, при этом передать в определенный метод DbContext или ConnectionString из настроек и выполнить запрос. Т.е. нужно разместить где то некий код и передать в него какие то объекты.
Однако Layout не имеет своего конструктора для использования DI и вообще не подразумевает интенсивного кодирования. Выполнять это все в Startup по-моему не грамотно, к тому же все равно нужно результат как-то передать в Layout.
Есть еще способ сделать такую вещь через ViewComponent.
Но такой вариант мне кажется неподходящим, т.к. если у меня на странице множество динамических данных, то создавать под каждый из них свой компонент как то слишком сложно.
Пока решил эту проблему с помощью свойства static объекта , но это противоречит концепции DI и вообще...

Хотелось бы выяснить общую практику: 1) где этот код размещать 2) как его вызвать 3) как передать в него необходимые объекты (DbContext, Configuration).
  • Вопрос задан
  • 862 просмотра
Решения вопроса 1
@kttotto
пофиг на чем писать
Инжектить можно прямо на странице
@inject ModelOrService ModelOrService;
И в принципе в этом случае это может быть сервис, который будет работать с бд.

Но когда мне надо в шаблоне сделать вывод динамик контента, я это реализую в js. Или важно это решить именно Разором.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
RouR
@RouR
@Html.PartialAction

Код - внутрь контроллера этого PartialAction
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы