2009-06-04 56 views
5

我有一個web應用以下情況:在asp.net MVC緩存部分景色

一表「員工」包含列「」和「功能」。兩者都是下拉列表。

「功能」下拉列表選項取決於所選的「部門」。 (所以每個部門都有自己的功能列表)

更改部門時,我使用參數「DepartmentId」對控制器操作執行ajax調用。這是控制對象上的[outputcache]屬性,所以它返回的函數可以緩存給每個部門ID。

我的問題是頁面的初始加載。 你可以在視圖中調用控制角色並利用緩存嗎?

有人嗎? 30個意見,沒有答案..有關我的問題的任何評論?太明顯了?太難?太奇怪了?谷歌的東西(雖然我沒有找到解決方案)?

回答

4

Phil Haack在一篇名爲Donut Hole Caching的類似主題上寫了一篇短文。它是一個很好的起點。

+0

不知道了,如果這固定它,但我標記爲答案無論如何.. – 2010-09-14 09:12:17

0

你的意思是說你想調用控制器動作,直接生成視圖,而不是使用ajax生成函數?如果我理解正確,我不認爲有可能獲取輸出緩存中的數據(但我可能是錯的)。無論如何,如果你能得到它,你仍然需要再次解碼數據。

你也可以嘗試

  • 緩存的部門識別自己在HttpContext.Cache和行動都使用它們(也許這是如此之快,你不需要再的OutputCache並且沒有雙緩存)
  • 或者如果部門/功能的數量不是很大,您可以創建一個包含所有功能的json結構,將它們存儲在視圖中並且根本不使用ajax。
4

我會使用子控制器或更好的部分請求來做你在問什麼。在典型的頁面中,我傾向於不緩存整個頁面,而是將區域分解爲通過部分請求調用的不同操作方法。這樣我可以在每個區域有不同的過期輸出緩存。這是更多的頁面生命週期,但是當它們被緩存時,它們確實不是對性能徵稅。如果開始執行某個特定區域,維護和優化也更容易。

根據我的經驗,這與ajax模式非常吻合,因爲您只需從一個操作方法中「獲取」您的數據。

部分要求進行了討論here和子控制器here

希望這有助於。