2010-01-16 223 views
0

我最近決定嘗試使用MVC 2來自webforms背景,在嘗試找出緩存提供給部分內容的數據的最佳實踐解決方案時遇到了一些麻煩查看(用戶控制)。ASP.NET MVC 2用戶控件緩存

在我的webforms應用程序中,我有一個AccountSummary.aspx頁面,它有一個Booking.ascx控件。 Booking.ascx的輸出緩存爲300秒,在AccountSummary.aspx的Page_Load中,我用來檢查控件是否爲空,如果不是,則將其傳遞給UserId。然後,在Booking.ascx的代碼隱藏中,我用數據訪問調用來獲取所有預訂,因此每300秒最多一次獲取預訂的調用。

我想在MVC2中實現相同,但我似乎無法找到實現此目標的最佳方式,因爲網絡上的所有示例似乎都將數據傳遞給RenderPartial HTML幫助器方法中的用戶控件(我不希望因爲每個頁面加載,我將不得不通過這會殺了我的數據庫預訂的信息!)

請指教:-)

乾杯,A

+0

爲什麼不緩存模型呢?這樣,您就不必在每次加載頁面時轉到數據庫。 – 2010-01-18 08:36:53

回答

4

ASP.NET MVC 2中沒有簡單的視圖級緩存機制。

有一些聰明的技巧來利用ASP.NET的輸出緩存,像Donut CachingDonut Hole Caching,但他們都違反了MVC模式(通過使DAL波及到的意見,例如),是很難得到正確的展覽事實上沒有記錄的行爲。 (參見在博客帖子的評論和其他職位這裏SO獲得更多信息。)

簡短的回答是,視圖級緩存(即高速緩存的局部視圖或視圖,而不是一個操作方法)是您不想參加的旅程,如果您不熟悉ASP.NET MVC。因此,您應該緩存在您的DAL中,或緩存在您的操作方法中。

在您的示例中,您可以在返回包含預訂列表的部分視圖的操作方法上有OutputCacheAttribute,或者可以使用System.Web.Cache在您的DAL中檢索預訂列表時緩存預訂列表。

+0

非常感謝,似乎我從錯誤的天使看問題。出於興趣,System.Web.Cache是​​一種可伸縮的緩存機制?使用我的Web應用程序,我可以同時存儲大約100,000個LINQ-to-SQL對象。 – romiem 2010-01-18 09:40:52

+1

System.Web.Cache具有*非常高的性能和可擴展性。不過,它不支持分配。 如果您正在緩存Linq-To-SQL對象,請小心意外緩存EntityRefs和EntitySets。 – bzlm 2010-01-18 15:30:50