<%@ OutputCache Duration="120" VaryByParam="*" %> //我想问一下这里该怎么写?
<asp:Repeater ID="rptMoreList" runat="server">
        <ItemTemplate>
            <li>.........</li>
      </ItemTemplate>
</asp:Repeater>private int _type = 1;
    protected void Page_Load(object sender, EventArgs e)
    {
        rptMoreList.DataSource = bll.GetTopN(_type);
        rptMoreList.DataBind();
    }    public int Type
    {
        set { this._type = value; }
        get { return this._type; }
    }页面调用:<uc2:More ID="More1" runat="server" />
if (More1 != null)
        {
            More1.Type = type;
        }想实现效果:此页面为信息显示页面,左侧有一区域用以显示该信息所在栏目推荐信息列表,也就是说此页面根据信息所在不同的栏目显示不同的信息列表,栏目类型对应用户控件的属性。问题:
当我使用VaryByParam="*" 时 每次都执行More1.Type = type 即便是type没有变化 也不调用缓存数据,而是重新读取数据库数据。 当我使用VaryByParam="None"时 缓存是生效了 但是即便是type发生了变化 列表信息还是第一次加载页面时所在栏目(type)的列表信息,不会随着栏目的改变而改变。请各位老大们给小女子予以解答

解决方案 »

  1.   

    VaryByParam是根据get的查询字符串或post参数来进行区分判断的
      

  2.   

    在页面间sid,page两个参数 sid在cs里得到type 赋值
      

  3.   

    4#我理解错了
    你的sid是url传参时候的参数名吗 那大概就是要写VaryByParam="sid"了吧
      

  4.   

    是的 sid是url传参时候的参数名 根据这个id查出所在type
      

  5.   

    可能和我的url重写有关 我的地址是Info_854_page_1.aspx这样的 不是Info.aspx?sid=854&page=1
      

  6.   

    这样啊...那要是单写一个隐藏字段给个name为sid然后赋值给它value?? 不知道了 试试吧 
      

  7.   

    ispostback加了 我再试试8楼的方法吧