У меня есть веб-сайт, который позволяет пользователям отправлять сообщения друг другу. В моем макете сверху есть панель уведомлений, в которой показано количество непрочитанных сообщений. Моя таблица с сообщениями имеет свойство Непрочитано (true, false). Я могу легко найти непрочитанные сообщения для текущего пользователя, я просто не знаю, как отправить его в макет. Есть ли контроллер, который я могу использовать для отправки в макет?Контроллер MVC для компоновки?
ответ
Я создал частичный вид и использовал контроллер для его вызова. Я запросил БД для непрочитанных сообщений и отправил счет через ViewBag. Я называю это с помощью @ Html.Action. Не знал, что это будет отображаться каждый раз, когда пользователь обновляет веб-страницу. Спасибо всем :)
Вы можете определить, что на страницах макета используется модель. Я бы рекомендовал использовать интерфейс в качестве модели.
public interface IMessageNotification {
public int UnreadMessagesCount {get; set;}
}
Все модели ViewModels, которые используют страницу макета, должны реализовать этот интерфейс. Вы можете получить доступ к нему в Layout.cshtml так:
@model IMessageNotification
<div class="myNotification">@Model.UnreadMessagesCount</div>
См ASP.NET MVC Razor pass model to layout
Другой способ определить раздел в макете, который действует как заполнитель для уведомления, и каждый вид может оказать уведомление, как оно хочет.
Планировка:
@* No model directive required *@
@if (IsSectionDefined("Notification")) {
@RenderSection("Notification")
}
Бетон View (SomeConcreteViewModel имеет свойство UnreadMessagesCount):
@model SomeConcreteViewModel
@section Notification {
<div class="myNotification">@Model.UnreadMessagesCount</div>
}
Что касается контроллера: вы можете использовать вспомогательный класс, который заполняет необходимые данные в интерфейс IMessageNotification реализованного по viewmodels. Вызовите это в каждом действии, которое отображает представление с использованием этого макета.
Спасибо за ответ. Я никогда не знал, что вы можете использовать viewmodel для макета. Я использовал другой подход. Я создал частичный вид и использовал контроллер для его вызова. Я запросил БД для непрочитанных сообщений и отправил счет через ViewBag. Я называю это с помощью @ Html.Action. Спасибо за ваши усилия, Георг :) – Ashley
https://gyazo.com/679499bcb8bef59b9d5843f068c253d2 Вот картина верхней панели, она находится в общей компоновке. – Ashley
Вы можете визуализировать частичный вид на странице макета –
Но где я могу назвать этот контроллер, который делает частичным, поэтому он обновляется каждый раз, когда пользователь делает что-либо на веб-сайте? – Ashley