我最近决定尝试MVC2,我来自webforms背景,我在试图找出缓存提供给部分视图(用户控件)的数据的最佳实践解决方案时遇到了一些麻烦。
在我的webforms应用程序中,我有一个具有Booking.ascx控件的AccountSummary.aspx页面。Booking.ascx的输出缓存为300秒,在AccountSummary.aspx的Page_Load中,我用来检查控件是否为空,如果不为空,则向其传递UserId。然后在Booking.ascx的代码隐藏中,我使用数据访问调用来获取所有预订,因此最多每300秒进行一次获取预订的调用。
我想在MVC2中实现同样的效果,但我似乎找不到最好的方法来实现这一点,因为web上的所有示例似乎都将数据传递给RenderPartial HTML helper方法中的用户控件(这是我不想要的,因为在每次页面加载时,我都必须传递预订信息,这将杀死我的数据库!)
请告知:-)
干杯A。
发布于 2010-01-18 08:34:17
在ASP.NET MVC2中没有用于视图级缓存的简单机制。
有一些巧妙的技巧可以利用ASP.NET中的输出缓存,如Donut Caching和Donut Hole Caching,但它们都违反了MVC模式(例如,通过使DAL溢出到视图中),很难获得正确的,并且表现出几乎没有文档记录的行为。(有关更多信息,请参阅博客帖子和其他帖子中的评论。)
简单地说,视图级缓存(即缓存部分视图或视图,而不是操作方法)是一种如果您是新手,您不会想要踏上ASP.NET的旅程。因此,您应该在DAL中进行缓存,或者在您的操作方法上进行缓存。
在您的示例中,您可以在操作方法上使用OutputCacheAttribute
,该方法返回带有预订列表的部分视图,或者您可以使用System.Web.Cache
在DAL中检索预订列表时对其进行缓存。
https://stackoverflow.com/questions/2077718
复制