Member 4594688 Ответов: 1

Mvc: как скоординировать модель данных для частичного представления в _layout?


Я создаю боковую панель "новости", которая должна сохраняться на веб-сайте во всех других представлениях, а данные извлекаются из базы данных в ViewBag.

Как я должен архитектировать сайт, чтобы сохранить частичное представление (или раздел...), которое ссылается на одни и те же данные на всех страницах? Разделение моделей / контроллеров и представлений блокирует эту конструкцию, когда другие представления сайта зависят от разных контроллеров.

Что я уже пробовал:

Я создал это как частичное представление, вызванное _layout, и снабдил его данными, запрошенными в домашнем контроллере и сохраненными в ViewBag для доступа к вызванному частичному представлению.

Однако при загрузке других страниц сайта они не имеют доступа к модели данных, которая изначально была заполнена домашним контроллером.

John C Rayan

Если вы используете partialview с переданной моделью, то вы должны убедиться, что модель передается частичному со всех страниц.

Однако в вашем случае, если вы используете _layout, вам не нужно использовать partialview, потому что _layout автоматически делится всеми страницами.
Таким образом, вы должны повторно посетить свой дизайн и сделать его проще.

Member 4594688

Вот в чем проблема. Архитектура _layout позволяет легко повторно использовать визуальный компонент, но как насчет данных, представленных этим компонентом? Я не хочу извлекать одни и те же данные для каждого отдельного представления на веб-сайте.

Мой дизайн "прост", но он не работает, поэтому мне, возможно, придется сделать его более сложным, чтобы заставить его работать.

1 Ответов

Рейтинг:
12

Member 4594688

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

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

Таким образом, создание сервиса и использование инъекции зависимостей для его непосредственного внедрения в представление _Layout (или частичное представление, вызываемое им) кажется идеальным решением. Мне никогда не нужно прикасаться к контроллеру, чтобы предоставить эти данные на боковой панели по всему веб-сайту.

Эта ссылка дает простой пример для подражания:

Инъекция услуг в представления & mdash; ASP.NET документация