假設有一個頁面 Default.aspx,一般來說只要在頁面上放上以下語法即可
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ OutputCache Location="Server" VaryByControl="ddl1;ddl2" VaryByParam="a;b" Duration="60" %>
VaryByControl 就是設定要 Cache 的控制項,VaryByParam 就是設定要 Cache 的 Get 或 Post 等參數,也可以設定 * 號代表全部或 None 代表空值;而 Duration 就是設定要Cache多久,以秒為單位。基本上只要這樣設定就可以達到 Page Cache 的目的了。
套用MasterPage
但在這次的案例中,要 Cache 的頁面有用到 MasterPage 所以應該就是把 OutputCache 那段語法放在 Content Page 裡就可以了,但加上去後,測試結果並無法 Cache,於是上網查了些資料,有人提到利用 Web User Control ,把要 Cache 的部份放到 Web User Control 裡,由於我整個 Content Page 都要 Cache 於是就把整個內容搬到 Web User Control,這樣就真的可以Cache了。
觸發後端事件遇到問題
然而事情當然不是這樣就結束了,搬到 Web User Control 裡的內容有用到 DropDownList,並且會觸發 OnSelectedIndexChanged 事件,OnSelectedIndexChanged 裡做的就是改變頁面的傳遞參數;當在前端操作 DropDownList 時應該 PostBack 至後端並且觸發 OnSelectedIndexChanged 事件,但是反覆測試了幾次後,頁面就異常了(沒有依照選擇的下拉選單項目顯示內容,一片空白),後來發現當前端反覆操作後,就不會執行 OnSelectedIndexChanged ,但仍會執行到 Page_Load 事件,依此類推,只要是後端的控制項事件就會有此問題,最後只好改變方式,把控制項後端的事件,改到前端,然後在 Page_Load 依不同的傳遞參數執行不同的程式碼解決。
以上是我測試的心得,如果有誤或有更好的方式,希望不吝指教
沒有留言:
張貼留言