2017-02-13 3 views
1

У меня есть веб-сайт, который позволяет пользователям отправлять сообщения друг другу. В моем макете сверху есть панель уведомлений, в которой показано количество непрочитанных сообщений. Моя таблица с сообщениями имеет свойство Непрочитано (true, false). Я могу легко найти непрочитанные сообщения для текущего пользователя, я просто не знаю, как отправить его в макет. Есть ли контроллер, который я могу использовать для отправки в макет?Контроллер MVC для компоновки?

+0

https://gyazo.com/679499bcb8bef59b9d5843f068c253d2 Вот картина верхней панели, она находится в общей компоновке. – Ashley

+0

Вы можете визуализировать частичный вид на странице макета –

+0

Но где я могу назвать этот контроллер, который делает частичным, поэтому он обновляется каждый раз, когда пользователь делает что-либо на веб-сайте? – Ashley

ответ

0

Я создал частичный вид и использовал контроллер для его вызова. Я запросил БД для непрочитанных сообщений и отправил счет через ViewBag. Я называю это с помощью @ Html.Action. Не знал, что это будет отображаться каждый раз, когда пользователь обновляет веб-страницу. Спасибо всем :)

0

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

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. Вызовите это в каждом действии, которое отображает представление с использованием этого макета.

+0

Спасибо за ответ. Я никогда не знал, что вы можете использовать viewmodel для макета. Я использовал другой подход. Я создал частичный вид и использовал контроллер для его вызова. Я запросил БД для непрочитанных сообщений и отправил счет через ViewBag. Я называю это с помощью @ Html.Action. Спасибо за ваши усилия, Георг :) – Ashley