gpt4 book ai didi

asp.net-mvc - 如何将模型加载到 _Layout.cshtml 并在各种 View 之间共享?

转载 作者:行者123 更新时间:2023-12-04 17:50:02 26 4
gpt4 key购买 nike

我有一个处理“类(class)”的 MVC4 项目。整个应用程序中的许多页面需要处理类(class)列表 - 用户配置文件需要拉出列表,/Courses 的索引 View 需要拉出列表,等等。

由于这些数据几乎总是需要的,我想将它作为初始请求的一部分加载,所以我只需要查询数据库一次。

我想象了一个场景,其中数据被放置在 Layout.cshtml 中,然后其他 View 可以根据需要访问模型数据,尽管我没有看到实现这一点的明确方法。我想我可以把问题分成两部分:

  • 获取加载到 Layout.cshtml 中的数据
  • 从其他 View 访问此数据

  • 我对两者都有些困惑 - 我怎样才能做到这一点?

    最佳答案

    您应该使用 CacheOutputCache , 将此列表放入 Partial View ,然后在您需要的任何地方渲染它:

    1) 创建一个 Action获取 Partial View .此 View 将缓存最长持续时间,然后任何访问都不会产生任何开销:

    [NonAction]
    [OutputCache(Duration = int.MaxValue, VaryByParam = "none")]
    public ActionResult GetCourses()
    {
    List<Course> courses = new List<Course>();

    /*Read DB here and populate the list*/

    return PartialView("_Courses", courses);
    }

    2) 使用 Chache填充 Partial View以同样的方式:
    [NonAction]
    public ActionResult GetCourses()
    {
    List<Course> courses = new List<Course>();

    if (this.HttpContext.Cache["courses"] == null)
    {
    /*Read DB here and populate the list*/

    this.HttpContext.Cache["courses"] = courses;
    }
    else
    {
    courses = (List<Course>)this.HttpContext.Cache["courses"];
    }

    return PartialView("_Courses", courses);
    }

    3) 通过 Html.Action 渲染此 View 或 Html.RenderAction :
    @Html.Action("GetCourses", "ControllerName")

    或者
    @{ Html.RenderAction("GetCourses", "ControllerName"); }

    更多关于缓存的信息: Improving Performance with Output Caching

    关于asp.net-mvc - 如何将模型加载到 _Layout.cshtml 并在各种 View 之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18879673/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com