gpt4 book ai didi

asp.net-mvc - 如何在 _Layout 页面中仅加载一次 TreeView 数据

转载 作者:行者123 更新时间:2023-12-03 22:51:41 27 4
gpt4 key购买 nike

我们的用户要求将 Kendo Tree 显示在页面左侧面板的 MVC Web 应用程序中。他们希望左侧面板出现在每个屏幕上。

目前,我的 _Layout.cshtml 页面有一部分呈现 Kendo Tree :

<div>
@{Html.RenderAction("GetTree", "Tree");}
</div>

在该操作中,我进行了数据库调用以获取树的内容并将模型绑定(bind)到 View ,如下所示:
@model IEnumerable<TreeViewItemModel>

但显然使用这种模式,我转到 _Layout 的每一页都会被调用,树数据会再次从数据库中获取。这不是很有效。

有什么更好的方法让我只进行一次数据库调用?

最佳答案

我将假设每个页面和每个用户的树的内容都是相同的。

在这种情况下,您可以缓存检索到的数据库数据,这样您就不必在每次页面呈现时都检索它。缓存的方法有很多:最简单的可能是使用ASP.NET自己的缓存,详细描述(附演练)here .

您可能仍然需要在每个页面上呈现它(除非您想进入部分页面缓存,而且我不确定它在 MVC 中是如何工作的)但您绝对可以避免重复的数据库命中。

ETA:您可以创建一个包装器或帮助器类,以按公司检索必要的树数据。相关的方法看起来有点像这样:

public IEnumerable<TreeViewItemModel> GetCachedTreeDataByCompany(int companyId)
{
var data = Cache["TreeData"] as IEnumerable<TreeViewItemModel>;
if(data == null)
{
data = GetTreeData(); // whatever you need to do to get the data
Cache.Insert("TreeData", data);
}
return data.Where(tvim => tvim.CompanyId == companyId).ToArray();
}

关于asp.net-mvc - 如何在 _Layout 页面中仅加载一次 TreeView 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171053/

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