大年初一,祝大家新年快乐,万事如意,
我aspx页面的的代码如下,有四个标题对应四个内容,只显示其中一个(初始设为显示content1),功能是:当点击一标题如"发放记录"(ID号为titel2)时,就显示,对应的(ID号为content2)DIV框,其它的div隐藏.CSS代码多我没列出(点击显示对应的DIV是没有问题的)。但我在content2里有个datagrid,要实现分页功能,问题就出来了,当显示content2时点下一页的时候,页面重新加载初始化了,就会把content1显示出来,而我想看的是content2的第二页内容.我想到的办法是在后台e.NewPageIndex时,把content2的className设置为显示(css里activecontent为显示,hiddencontent为隐藏)其它的DIV设为隐藏。那怎么在_PageIndexChanged事件里改变前台className呢???或者大家有别的方法吗??
<div class="searchmenu">
  <ul class="title">
  <li><a id="title1" onclick ="chang(1)" href="#" class="active">库存</a></li>
  <li><a id="title2" onclick ="chang(2)" href="#">发放记录</a></li>
  <li><a id="title3" onclick ="chang(3)" href="#">网点库存</a></li>
  <li><a id="title4" onclick ="chang(4)" href="#">出单记录</a></li>
          </ul>
  <div id="content1" class="activecontent">
                内容太多没例出1
  </div>
  <div id="content2" class="hiddencontent">
     <asp:DataGrid ID="dgShowInComeNote" runat="server" AllowPaging="True" AutoGenerateColumns="False" OnPageIndexChanged="dgShowInComeNote_PageIndexChanged" PageSize="18">
<PagerStyle Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False" Font-Underline="False" HorizontalAlign="Center" />
   <Columns>
   <asp:BoundColumn DataField="icSource" HeaderText="来源"></asp:BoundColumn>
   <asp:BoundColumn DataField="insuType" HeaderText="类别"></asp:BoundColumn>
   <asp:BoundColumn DataField="icFromNum" HeaderText="起号"></asp:BoundColumn>
    <asp:BoundColumn DataField="icDate" HeaderText="接收日期"></asp:BoundColumn>
    </Columns>
</asp:DataGrid>
  </div>
  <div id="content3" class="hiddencontent">
                内容太多没例出3
  </div>
  <div id="content4" class="hiddencontent">
                内容太多没例出4
  </div>

解决方案 »

  1.   

    你的代码太多太乱,没有看全。给你写个例子自己理解一下:bool SubStateChanged=true;int ShowContentNum
    {
      get
      { 
        if(ViewSate["showContentNum"]==null)
          return 1;
        else 
          return (int)ViewSate["showContentNum"];
      }
      set
      {
        ViewSate["showContentNum"]=value;
        SubStateChanged=true;
      }
    }//这里我按照你的设计。原本对于asp.net来说,可以通过控件的Visible使得控件根本不重新
    //绑定内容(需要绑定前判断),也不用输出到客户端。
    void OnSubStateChanged()
    {
      this.Content1.CssClass=ShowContentNum==1?"activecontent":"hiddencontent";
      this.Content2.CssClass=ShowContentNum==2?"activecontent":"hiddencontent";
      this.Content3.CssClass=ShowContentNum==3?"activecontent":"hiddencontent";
      this.Content4.CssClass=ShowContentNum==4?"activecontent":"hiddencontent";
    }void page_load(object sender,EventArgument e)
    {
      ......
      if(SubStateChanged)
        OnSubStateChanged();
    }void page_PreRender(object sender,EventArgument e)
    {
      .......
      if(SubStateChanged)
        OnSubStateChanged();
    }
      

  2.   

    少写了一句话,补上:void OnSubStateChanged()
    {
      SubStateChanged=false;
      this.Content1.CssClass=ShowContentNum==1?"activecontent":"hiddencontent";
      this.Content2.CssClass=ShowContentNum==2?"activecontent":"hiddencontent";
      this.Content3.CssClass=ShowContentNum==3?"activecontent":"hiddencontent";
      this.Content4.CssClass=ShowContentNum==4?"activecontent":"hiddencontent";
    }
      

  3.   

    要注意,这里可以看出Content1、Content2、Content3、Content4都应该是做为服务器控件来使用的。
      

  4.   

    都应该是做为服务器控件来使用的  -->  都应该是做为Web控件来使用的例如Panel控件。如果你它们作为Html控件(Html控件和Web控件都是服务器控件),那么可以这样设置cssclass:
      this.Content1.Attributes["CssClass"]=
        ShowContentNum==1?"activecontent":"hiddencontent";
      

  5.   

    Q: 想到的办法是在后台e.NewPageIndex时,把content2的className设置为显示
    ————————————————————————————————————————
    A: 接上面代码,在此时应该写:
      ShowContentNum=2;仅这一条代码就足矣设置切换所有content的显示。
      

  6.   

    非常感谢谢:sp1234(信不信?wwf刚出来,我却几乎看到它是如何死的);
    你写的属性点醒了我,我就用属性和javascript搞定了;
    给大家共享一下代码;       protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.bindDgShowStockPile();//初始化库存邦定
                this.bindDgShowInComeNote();//初始化接收记录邦定
                this.ViewState["showTitleNum"] = 1;
                this.ViewState["showContentNum"] = 1;
                this.changedNum();
            }
        }
        //设置页面div和<a>的class
        private void changedNum()
        {
            this.title1.Attributes["Class"] = ShowTitelNum == 1 ? "active" : " ";
            this.content1.Attributes["Class"] = ShowContentNum == 1 ? "activecontent" : "hiddencontent";        this.title2.Attributes["Class"] = ShowTitelNum == 2 ? "active" : " ";
            this.content2.Attributes["Class"] = ShowContentNum == 2 ? "activecontent" : "hiddencontent";
        }
        int ShowTitelNum
        {
            get
            {
                return (int)(this.ViewState["showTitleNum"]);
            }
        }
        int ShowContentNum
        {
            get
            {
                return (int)(this.ViewState["showContentNum"]);
            }
        }
       //接收记录显示分页
        protected void dgShowInComeNote_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
        {
            this.ViewState["showTitleNum"] = 2;
            this.ViewState["showContentNum"] = 2;
            this.changedNum();        this.dgShowInComeNote.CurrentPageIndex = e.NewPageIndex;
            this.bindDgShowInComeNote();
        }
    实际效果就是csdn首面左列的"排行榜"效果的基础上我加了分页,本来很简单的,让我搞复杂了,