这个页面实现绑定Repeater显示内容并分页 ,Repeater的属性设置为:EnableViewState="false"
Repeater中每一行都有修改数据项的Button;如: <asp:Repeater ID="Rep_List" runat="server" OnItemDataBound="Rep_List_ItemDataBound"
                    OnItemCommand="Rep_List_ItemCommand" EnableViewState="false">
                    <ItemTemplate>
                            <tr class="btop">
                                <td rowspan="3" class="br">
                                    <%#Eval("GHXX_XH")%>
                                </td>
   <td>
                                    <%#Eval("KH_HM")%>
                                </td>
                                <td rowspan="3">
                                    <asp:LinkButton ID="Lbtn_Confirm" runat="server" CommandName="Confirm" CommandArgument='<%#Eval("GHXX_ID") %>'
                                        Text="修改"></asp:LinkButton>
                                </td>
 
                            </tr>
                          
                    </ItemTemplate>
                </asp:Repeater>
在OnInit方法中重新绑定数据源如:    protected override void OnInit(EventArgs e)
        {
            FenYe1.OnPageChange += new Control.PageChangeHandler(FenYe1_OnPageChange);
            if (!IsPostBack)
            {
               // HttpCookie _Cookie = new HttpCookie("PageIndex", "1");
               // HttpCookie _Cookies = new HttpCookie("KHZT", "");
               // HttpCookie _CookieFenZu = new HttpCookie("FenZu", "4");
               // Response.AppendCookie(_CookieFenZu);
               // Response.AppendCookie(_Cookie);
               // Response.AppendCookie(_Cookies);
            }
            //_FenZu = int.Parse(Request.Cookies["FenZu"].Value);
            //_KHZT = Request.Cookies["KHZT"].Value;
            //_PageIndex = int.Parse(Request.Cookies["PageIndex"].Value);
            Bind();
            base.OnInit(e);
        }用ViewState的设置的属性如:
        /// <summary>
        /// 当前页码
        /// </summary>
        public int _PageIndex
        {
            get
            {
                return ViewState["PageIndex"] != null ? Convert.ToInt32(ViewState["PageIndex"]) : 1;
            }
            set
            {
                ViewState["PageIndex"] = value;
            }
        }
        /// <summary>
        /// 奇偶数
        /// </summary>
        public int _JO
        {
            get
            {
                return ViewState["JO"] != null ? Convert.ToInt32(ViewState["JO"]) : 0;
            }
            set
            {
                ViewState["JO"] = value;
            }
        }
      .........等等;请问大家:Repeater属性设置为EnableViewState="false"时,.aspx.cs中设置的用ViewState保存的属性还能保存到响应页面
的__EVENTVALIDATION中吗?
我觉得会保存到__EVENTVALIDATION中的。如果我不设置Repeater属性EnableViewState="false",并把OnInit()方法中的代码写到Page_Load当中,这时,在第二页,点击Repeater中其中一行的Button按钮调试,_PageIndex的值就是2,就能找到我点击的那一行。但是,如果我在页面的第二页,_PageIndex的值为2,点击Repeater中其中一行中的Button按钮调试,这时属性_PageIndex就变成默认的1了,就不能找到我点击的那一行了。我现在的解决办法是把这几个属性保存的Cookie中,每次访问一次修改一次,可以达到效果,如:    protected override void OnInit(EventArgs e)
        {
            FenYe1.OnPageChange += new Control.PageChangeHandler(FenYe1_OnPageChange);
            if (!IsPostBack)
            {
               HttpCookie _Cookie = new HttpCookie("PageIndex", "1");
               HttpCookie _Cookies = new HttpCookie("KHZT", "");
               HttpCookie _CookieFenZu = new HttpCookie("FenZu", "4");
               Response.AppendCookie(_CookieFenZu);
               Response.AppendCookie(_Cookie);
               Response.AppendCookie(_Cookies);
            }
            _FenZu = int.Parse(Request.Cookies["FenZu"].Value);
            _KHZT = Request.Cookies["KHZT"].Value;
            _PageIndex = int.Parse(Request.Cookies["PageIndex"].Value);
            Bind();
            base.OnInit(e);
        }
但是我觉得这样不好,属性多了,写着就太麻烦了请高手指点下,还有里面的代码只是想让大家明白我说的什么意思,代码并没写全,不要太注意代码...谢谢

解决方案 »

  1.   

    不知道为什么有这么多人在意这个viewState.viewState本质上就是一个隐藏域。每一个东西的存在都有他必然的道理。就算基于静态http的开发,有时候为了保存状态自己也会用隐藏域,不知道为什么自己用viewState可以忍受,看起来很美观,很自满。而微软用了隐藏域,部分人就把它归为垃圾代码。而选择js去做某些事,有时候减少和数据库交互的次数,比你浏览器多下载不到100KB的一段内容强得多。
      

  2.   

    嗯,呵呵,可能吧,但是现在我想看看这样能不能实现,对于这个 “如果我在页面的第二页,_PageIndex的值为2,点击Repeater中其中一行中的Button按钮调试,这时属性_PageIndex就变成默认的1了,就不能找到我点击的那一行了。” 我不知道为什么了?能解释一下吗?
      

  3.   

    嗯,呵呵,可能吧,但是现在我想看看这样能不能实现,对于这个 “如果我在页面的第二页,_PageIndex的值为2,点击Repeater中其中一行中的Button按钮调试,这时属性_PageIndex就变成默认的1了,就不能找到我点击的那一行了。” 我不知道为什么了?能解释一下吗?