ViewModel用于布局

本文关键字:布局 用于 ViewModel | 更新日期: 2023-09-27 18:13:50

这可能是一个基本问题,但到目前为止我还不知道如何解决。

我有一个_Layout.cshtml,它有一些标记来描述哪个用户登录。此信息存储在我的数据库中,因此我需要在所有视图中检索此信息。

我的应用程序包含很多视图,这些信息需要在所有页面上显示。

我如何解决这个问题,而不需要在所有控制器上获得这些信息?

更新,我的解决方案是这样的,使用@Jayesh Goyani指导:

[ChildActionOnly]
public async Task<ActionResult> GetDashboardView()
{
    var model = new DashboardModel();
    /* fill model from database */
    return model != null ? PartialView("_DashboardView", model) : null;
}

_DashboardView位于我的/Views/Dashboard/_DashboardView.cshtml:

@model DashboardViewModel
<p>@Model.MyProperty</p>

在我的_Layout.cshtml中这样使用:

@{Html.RenderAction("GetDashboardView", "Dashboard");}

ViewModel用于布局

正确的方法是在布局文件中调用Html.RenderAction(),在那里你需要用户特定的细节。然后在某个地方创建一个合适的Action方法,读取用户的帐户详细信息并将其作为视图(部分视图)或原始html(返回内容("…"))返回。

这样,您还可以受益于缓存布局页面和保持用户的帐户详细信息区域不缓存的能力(因为每个用户的情况显然不同)。

设置一个ViewBag不是一个好主意,它不是强类型,它打破了MVC的正确模式。通过在ASP中使用过滤。