新手学习,这个困扰我3天了下面是我自己的理解,帮忙看下对不对.....
Petshop实现了类似于二重缓存,第一重是<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %>这个,缓存的是根据VaryByParam为索引来缓存整个页面(即根据这个来判断该页有没有缓存),这重缓存是缓存的是整个页面,包括ascx这个控件里的所有内容;第二重缓存是CachePolicy.Dependency = DependencyFacade.GetProductDependency()这个,它关联缓存设置,看数据库有没有改动,如果有改动那么整个页面缓存就过期,下面是petshop中的一段代码,前台和后台的
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProductsControl.ascx.cs" Inherits="PetShop.Web.ProductsControl" EnableViewState="false" %>
<%@ Register TagPrefix="PetShopControl" Namespace="PetShop.Web" %>
<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %><div align="center" class="productsPosition">
    <PetShopControl:CustomList ID="productsList" runat="server" EmptyText="No products found." OnPageIndexChanged="PageChanged" PageSize="4" RepeatColumns="2" CellPadding="16" CellSpacing="0" Width="500px">        
        <ItemTemplate>
                       
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />        
    </PetShopControl:CustomList>
 </div>CustomList 继承自DataListprotected void PageChanged(object sender, DataGridPageChangedEventArgs e) {
            //reset index
            productsList.CurrentPageIndex = e.NewPageIndex;            //get category id
            string categoryKey = Request.QueryString["categoryId"];            //bind data
            Product product = new Product();
            productsList.DataSource = product.GetProductsByCategory(categoryKey);
            productsList.DataBind();        }        /// Add cache dependency
        protected void Page_Load(object sender, EventArgs e) {
            this.CachePolicy.Dependency = DependencyFacade.GetProductDependency();
        }是不是这样了之后每次进入页面执行pageload(即检查有没有数据跟新),没得话然后再检查缓存,缓存有的话直接读取,如果换页的话也因为VaryByParam=page来判断是否有缓存,有的话直接读取,但是我不清楚PageChanged()要不要再执行啊?
也不知道我表达清楚了没,或者我的理解根本就是我想象出来的.......