2017-02-13 57 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") 
} 

混凝土视图(SomeConcreteViewModel具有财产UnreadMessagesCount):

@model SomeConcreteViewModel 
@section Notification { 
    <div class="myNotification">@Model.UnreadMessagesCount</div> 
} 

至于控制器:您可以使用填充所需的数据到实现的IMessageNotification接口辅助类由视图模型。在使用此布局呈现视图的每个操作中调用此函数。

+0

谢谢你的答案。我从来不知道你可以使用视图模型进行布局。我用了不同的方法。我创建了一个局部视图,并使用一个控制器来调用它。我查询了数据库的未读消息,并通过ViewBag发送了计数。我用@ Html.Action调用它。谢谢你的努力,乔治:) – Ashley