上一篇文章(ASP.NET的OutputCache。直接看執行結果,學習Cache一看就懂)講的是底下的 VaryByParam的用法。
這個範例,則是改用 VaryByControl 的用法。
我們鎖定畫面上的下拉式選單(DropDownList控制項),來作Cache
因為這部份的內容,來不及在新書上面發表,所以在Blog上面分享給讀者。新書上市-- ASP.NET專題實務(文魁出版)
採用的範例DataBase,也是書本上附的 「test資料表」。
讀者可以把程式下載回去,玩玩看。
這支程式的關鍵,也只有一句話 <% @ OutputCache Duration ="30" VaryByControl ="DropDownList1" %>
把他設定在 .aspx檔案的HTML碼裡面即可。
意思是說:快取設定30秒,鎖定 DropDownList1這個控制項。
HTML畫面的設定也很簡單。這個範例畫面,在中國時報、蘋果日報的網站上,還滿常見的(我不確定他們有沒有用到 Cache)
兩個控制項(DropDownList 與 GridView),搭配一個 SqlDataSource。

上面的HTML畫面,最重要的部份,就是兩個控制項之間的互動。
當我們選取 DropDownList的任何一個選單,底下的 GridView內容會隨之變換。
要依賴 GridView的 SqlDataSource來輔助,下面這畫面是關鍵!!

P.S. 如果上面這兩張圖片的設定,您看不懂的話,那您就是剛剛入門ASP.NET的新手而已。 能力還太淺,還用不著學習 Cache這部份。
上面這些步驟,大部分的ASP.NET書籍一定會講。 您先把這一部份的基礎,學通、學熟練了,再來學Cache。
因為這步驟(上面兩張圖片)很重要,所以我的書本 Ch 9(第九章)反覆練習這個重點,衍生出各種常用的範例。
新書上市-- ASP.NET專題實務(文魁出版)
HTML設計畫面的原始碼如下(僅供參考):
01 
Server時間(網頁執行瞬間的時間)--<font color =
"red"><%=now()%> </font><p>
02 
<asp:DropDownList ID=
"DropDownList1" runat=
"server" AutoPostBack=
"True">
03 
<asp:ListItem>==請選擇==</asp:ListItem>
04 
<asp:ListItem>政治</asp:ListItem>
05 
<asp:ListItem>教育</asp:ListItem>
06 
<asp:ListItem>其他</asp:ListItem>
07 
<asp:ListItem>娛樂</asp:ListItem>
08 
</asp:DropDownList></p>
09 
<p>
10
11
12 
<asp:GridView ID=
"GridView1" runat=
"server" CellPadding=
"4" DataSourceID=
"SqlDataSource1">
13 
........這部份省略...........
14 
</asp:GridView>
15
16
17 
<asp:SqlDataSource ID=
"SqlDataSource1" runat=
"server" ConnectionString=
"<%$ ConnectionStrings:testConnectionString %>" 18 
SelectCommand=
"SELECT [id], [test_time], [title], [class] FROM [test] WHERE ([class] LIKE '%' + @class + '%')"> 19 
<SelectParameters>
20 
<asp:ControlParameter ControlID=
"DropDownList1" Name=
"class" PropertyName=
"SelectedValue" 21 
Type=
"String" />
22 
</SelectParameters>
23 
</asp:SqlDataSource>
因為這個範例很簡單,不需要寫後置程式碼(Code-Behind)。
完全靠VS 2005 or VS 2008的畫面,拖拉點放就完成設定了。不用自己動手寫程式啦
執行結果如下:

當我們點選「政治」類的文章,程式執行時間是 02:07:13秒。
這時候你重整畫面,或是重複點選「政治」這個選項,畫面都不會動。因為已經被 Cache住了。
- 同一個「文章分類」,除非你等待30秒,這支程式才會重新跟Server索取資料。
- 或是你點選別的「文章分類」,這支程式才會重新跟Server索取資料。
Cache的好處,就是對於「非即時更新」、「變化不大」的資訊,我們可以透過 Cache的方式提供給讀者觀賞。
不需要每一次都跟 Server重新要求,這樣會浪費 Server的資源。
例如:股票市場的資訊(假設你作一個 Yahoo股市的網頁),台灣的股市是在9:00~13:30進行交易。這段時間的股票變化、漲跌,分分秒秒都不同。
你的網頁,用了 Cache那就死定了。因為觀眾看不到即時資料,就算他不斷重整畫面,也是看見「被Cache的舊資料」。
但是營業時間結束後,個股的今日漲跌已定,不再有變化。這時候使用Cache,就不需要每次都去Server / 資料庫裡面撈資料,浪費Server資源。
上面的解釋,您可以參考一下。或許我舉的例子,不太妥當。
因為 Cache何時該用?用在哪裡?.............都要看你的程式、客戶的需求來決定。千萬不要濫用這些功能。
===============================================================================
附檔的程式,僅供各位參考---- Sample.rar
有購買本書的讀者,可以搭配書本附的 test資料表來操作。
因為我的程式裡面,連結資料庫的帳號、密碼,都寫在Web.Config裡面,讀者請依照實際狀況修改一下。可以參考P.6-9頁(6-2節)的範例&步驟,設定自己的「資料庫連線字串」,並存在Web,config檔裡面。
或是本書的 P.14-16頁,自己修改資料庫連線字串。
範例的 Cache_2.aspx 就是上面的範例。
另外一個 Cache_2_old.aspx則是同一支程式(沒有Cache功能),兩個讓讀者作比較,執行起來玩玩看就知道了。
其餘的程式,則是上一篇文章的範例。
相關文章請看:
今日值班正妹,隋棠。


...... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務
(文魁出版,VB版 P8187 / C#版P09027)
下集已經出版囉~~~ASP.NET專題實務II:範例應用與4.0新功能 
.............................................................................................................. 寄信給我 mis2000lab (at) 雅虎.com.台灣 ........