【问题标题】:Sending data to header of _Layout.cshtml regardless of what page the user is on无论用户在哪个页面上,都将数据发送到 _Layout.cshtml 的标题
【发布时间】:2017-05-07 01:15:12
【问题描述】:

我的 _Layout.cshtml 文件的标题中有一个通知标志。这样我就可以不断地向用户显示他们的通知,无论他们在哪个页面上。

<a href="#">Notifications <span class="badge">@ViewData["NotificationCount"]</span></a><br>

但是,我想知道是否有更好的方法来做到这一点。似乎我需要在每一个视图的顶部执行以下操作:

@{
    ViewData["ReminderCount"] = Model.Notifications.Count();
}

这也意味着我需要将通知列表作为整个应用程序中每个页面 ViewModel 的一部分。

我在这里遗漏了什么吗?我觉得在 ASP.NET MVC 中必须有更好的方法来处理这样的事情。

理想的做法是在用户登录后立即加载一次通知并转到他们的仪表板,然后继续在所有页面上显示该数字,除非他们检查通知,然后数字就会清除。

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor asp.net-core-mvc


    【解决方案1】:

    您可以做的是创建一个动作并针对该动作创建一个局部视图并在 _Layout.cshtml 中调用它,这将使您免于代码重复和ViewData

    您的操作代码将如下所示:

    public ActionResult Notifications()
    {
       var model = Model.Notifications.Count();
       return View("_NotificationsPartial",model);
    }
    

    您的部分视图 _NotificationsPartial.cshtml 会像:

    @model System.Int32
    
    <a href="#">Notifications 
    <span class="badge">@Model</span>
    

    现在您只需在 _Layout.csthml 中调用它:

    @Html.Action("Notifications","SomeController")
    

    【讨论】:

    • 这正是我需要的谢谢!我唯一仍然感到困惑的是,我会将 ActionResult 放入哪个控制器来绑定部分模型。我想我会创建一个通用控制器。另外,由于某种原因,@Html.Action 在 ASP.NET Core 中不可用,有什么建议吗?
    • 在核心我们现在有组件,你需要做一个,见:mikesdotnetting.com/article/294/…
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2020-08-16
    • 2010-09-22
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多