我的团队正在创建一个MVC4应用程序,它具有上层菜单结构,其中包含特定于当前登录用户的菜单项,并显示下面所选菜单项的内容。菜单显示在部分视图“_MainMenu”中,MainMenuController Index操作负责从数据库获取菜单数据并返回菜单部分视图。主要布局“_Layout”通过调用@ Html.Action(“Index”,“MainMenu”)来呈现菜单。
我们希望避免在每次刷新页面时访问数据库以获取菜单结构数据,并且我们还希望在选择不同的菜单项时避免任何可见的菜单结构重新加载。
我一直在研究AJAX,我已经实现了一些选择新菜单项的东西,它会在菜单下面加载该项目的内容,方法是将ID =“mainContent”的div替换为内容作为局部视图(此div位于加载的视图“MainContent”)上。这样,菜单永远不会重新加载,页面永远不会完全刷新(只有不同的部分内容视图在选择不同的菜单项时交换进出)。
此解决方案有效,但我不确定它是否是最佳实践,或者是否有更好的解决方案涉及缓存。 AJAX解决方案的一个问题是URL永远不会从“http:// MySite / MainContent”更改。这意味着单击浏览器上的“后退”按钮不能按预期工作,并且按F5刷新浏览器页面会丢失当前显示的页面。刷新问题可以通过记住选定的菜单项来解决,但我仍然不相信这是AJAX打算使用的方式。
根据他们的经验,有人可以告诉我他们是否认为缓存会更好地解决这种情况。
答案 0 :(得分:0)
如果用户的菜单项不太可能改变,那么你可以使用一个简单的静态字典(long是用户id)来缓存后端的数据,并定期刷新它。
通常,如果进行任何缓存,则必须确保在更新基础数据时刷新缓存的数据。因此,如果您只有一个应用程序访问您的数据库,那么它只是简单而安全。如果有多个应用程序,那么您必须添加一种机制来保持缓存同步。
在我正在开发的项目中,我们在DB中存储了用户 - 角色 - 模块实体和关系,并将模块权限绑定到角色而不是用户。由于角色权限不太可能发生变化,因此可以安全地进行缓存。