asp.net-mvc – ASP.Net MVC数据库驱动的菜单,带缓存
我正在尝试为我的网站创建一个菜单.它需要满足以下要求
>它必须是数据库驱动的,从DB中提取数据以构建菜单结构 目前,我有一个简单的示例运行,但我不知道如何集成缓存.我想我可能需要在整个工作方式上进行修改.这里是: 我有一个ProductMenuAttribute,它从数据库中提取数据,并将其存储在ViewData中: public class ProductMenuAttribute: FilterAttribute,IActionFilter { #region IActionFilter Members public void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext != null) { var context = filterContext.Result as ViewResult; if (context != null) { ProductsRepository repository = new ProductsRepository(Properties.Settings.Default.SqlConnectionString); context.ViewData.Add("ProductsList",repository.GetAllProductRanges()); } } } public void OnActionExecuting(ActionExecutingContext filterContext) { } #endregion } 在我的Site.master中,我从ViewData中提取数据并使用它来呈现我的菜单.这是我的无序菜单列表中的一个小片段,它使用CSS进行样式设置.这是代码: <li> <%= Html.ActionLink("Products","Index","Products")%> <% IQueryable<ProductRange> productRanges = ViewData["ProductsList"] as IQueryable<ProductRange>; %> <% if (productRanges != null) { %> <ul> <% foreach (ProductRange range in productRanges) { %> <li><%= Html.ActionLink(range.Name,"RangeDetails","Products",new { id = range.ID },null)%></li> <% } %> </ul> <% } %> </li> 然后我用[ProductMenu]属性装饰每个控制器,如下所示: [ProductMenu] public class HomeController : BaseController { public ActionResult Index() { return View(); } public ActionResult About() { return View(); } } 现在每当我的控制器上的任何操作被命中时,将调用ProductMenuAttribute类中的OnActionExecuted方法,该方法将设置ViewData,最终将在我的Site.Master上使用它来从DB构建我的菜单,我打电话给任何一个动作. 现在的问题是 – 如何在这种情况下添加缓存?我不知道从哪里开始,并且感觉我拥有的解决方案不可缓存. 解决方法
我认为我真正想要的是使用MVC Futures项目中的Html.RenderAction()帮助扩展.
我们的想法是使用上面的方法在控制器上调用一个动作,它将通过从数据库中提取数据来生成HTML菜单结构.然后我还使用简单的输出缓存来缓存数据几分钟. 这是迄今为止我发现的最简单的方法,可以达到我想要的效果. 编辑:菲尔哈克最近在博客上写了这篇文章 – Html.RenderAction and Html.Action.一篇很棒的博客文章,涵盖了我所有的确切需求,并解释了所有问题. 为了使缓存正常工作,我需要将我的Html.RenderAction()调用放在ViewUserControl中,并使用OutputCaching指令设置如下: <@ OutputCache Duration="100" VaryByParam="None" %> 然后我用Html.RenderPartial()调用上面的内容,瞧,一切正常! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 创建一个包含两列值的VB.NET数组?
- asp.net – Url片段为空
- asp.net – 为什么aspx文件返回404(“无法找到该
- asp.net – 网站无法启动另一个网站可能使用相同
- asp.net – 在服务器端运行VBA功能从WCF服务访问
- 在不加载实体的情况下更新ASP.NET MVC EF4中的相
- asp.net-mvc – RedirectToAction导致在ASP.NET
- asp.net-mvc – 如何将NUnit作为ASP.NET MVC的测
- asp.net-mvc – ELMAH – MVC 3 – 403 – 禁止:
- asp.net-mvc – jQGrid和MVC 3.0 ViewModel