加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何将模型加载到_Layout.cshtml并在各种视图之

发布时间:2020-12-16 07:17:42 所属栏目:asp.Net 来源:网络整理
导读:我有一个处理“课程”的MVC4项目.整个应用程序中的许多页面需要处理课程列表 – 用户配置文件需要提取列表,/课程的索引视图需要提取列表等. 由于这个数据几乎总是需要的,我想把它作为初始请求的一部分加载,所以我只需要一次查询数据库. 我想象一种情况,数据
我有一个处理“课程”的MVC4项目.整个应用程序中的许多页面需要处理课程列表 – 用户配置文件需要提取列表,/课程的索引视图需要提取列表等.

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

我想象一种情况,数据放在Layout.cshtml中,然后其他视图可以根据需要访问Model数据,尽管我没有看到实现这一目标的明确方法.我想我可以把问题分成两部分:

>将数据加载到Layout.cshtml中
>从其他视图访问此数据

我对这两方面都有点困惑 – 我怎么才能做到这一点?

解决方法

您应该使用Cache或OutputCache,将此列表放入Partial View,然后在需要的任何位置呈现它:

1)创建一个动作来瞳孔化部分视图.此视图将缓存最长持续时间,然后任何访问都不会产生任何开销:

[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以相同的方式填充部分视图:

[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或Html.RenderAction渲染此视图:

@Html.Action("GetCourses","ControllerName")

要么

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读