不太明白你的意思,最好贴出你的代码。不过刚开始的时候肯定没有,你要先给他值,然后再在Page_Load里取

解决方案 »

  1.   

    u try it
    private void Page_Load(object sender, System.EventArgs e)
    {
      ViewState["Para"]="Text";
      Resposne.Write(  ViewState["Para"].ToString());
    }
      

  2.   

    在调用RefreshDataForList函数时出错,说Index超出范围,
    在用这个控件时先调用CopyDatanamespace Liufeng.ClientQuery.UserControl
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; /// <summary>
    /// DataGridWithPage 的摘要说明。
    /// </summary>
    public abstract class DataGridWithPage : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.LinkButton btnPrevious;
    protected System.Web.UI.WebControls.LinkButton btnNext;
    protected System.Web.UI.WebControls.DataList DataList1;
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    protected int iRowCount;             //总的行数
    protected int iRowPerPage=5;           //每页的行数
    protected int iListPageSize=5;       //每列表的页数
    protected int iModelType=1;          //显示模式,页数或下一页  1:上一页  0:数值
    protected int iTotalListPage;
    protected System.Web.UI.WebControls.ListBox ListBox1;
    protected System.Web.UI.HtmlControls.HtmlGenericControl P1;
    protected System.Web.UI.HtmlControls.HtmlGenericControl P2;      //总共的列表数
    protected int iCurrentListPage;    //当前的列表

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (!Page.IsPostBack)
    {
    btnNext.Enabled=false;    //
    btnPrevious.Enabled=false;
    DataGrid1.PageSize=iRowPerPage;

    }
    String selectionId = Request.Params["category"];
    if((selectionId != "") && (!object.Equals(null,selectionId)))
    { RefreshDataForList(Convert.ToInt16( Request.Params["category"]));

    } } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.btnPrevious.Click += new System.EventHandler(this.btnPrevious_Click);
    this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void btnPrevious_Click(object sender, System.EventArgs e)
    {
    btnNext.Enabled = true;
    int iCurrentPage = (int)(ViewState["CurrentPage"]);
    iCurrentPage--;
    ViewState["CurrentPage"]=iCurrentPage;
    if (iCurrentPage >= 0) 
    {
    FillGrid(iCurrentPage);

    if (iCurrentPage==1)
    {
    btnPrevious.Enabled=false;
    } } private void btnNext_Click(object sender, System.EventArgs e)
    {
    int iCurrentPage = (int)(ViewState["CurrentPage"]);
    iCurrentPage++;
    ViewState["CurrentPage"]=iCurrentPage;
    btnPrevious.Enabled=true;
    FillGrid(iCurrentPage);
    }
    public void CopyData(DataSet ds)
    {
    iRowCount=ds.Tables["table"].Rows.Count ; if ((iRowCount/iRowPerPage/iListPageSize)>Math.Abs(iRowCount/iRowPerPage/iListPageSize))
    {
    iTotalListPage=Math.Abs(iRowCount/iRowPerPage/iListPageSize)+1;
    }
    else
    {
                iTotalListPage=Math.Abs(iRowCount/iRowPerPage/iListPageSize);
         }
    iCurrentListPage=1;
    ViewState["CurrentPage"]=1;
    btnNext.Enabled=true;
    btnPrevious.Enabled=false; System.IO.StringWriter sw;
    sw = new System.IO.StringWriter();
    ds.WriteXml(sw);
    ViewState["CopyData"] = sw.ToString();
    FillGrid((int)ViewState["CurrentPage"]);
    SetListPage(1);
    }
    private void FillGrid(int iCurrentPage)
    {
    System.IO.StringReader sr=new System.IO.StringReader((string)ViewState["CopyData"]);
    DataSet ds=new DataSet();
    ds.ReadXml(sr);
    DataTable dt=ds.Tables["table"];
    DataView dv=new DataView(dt); string sPageBegin=System.Convert.ToString((iCurrentPage-1)*DataGrid1.PageSize +1);
    string sPageEnd=System.Convert.ToString(iCurrentPage*DataGrid1.PageSize +1);
    dv.RowFilter="序号>=" + sPageBegin +" and 序号<" + sPageEnd ;
    dv.RowStateFilter=DataViewRowState.CurrentRows;
    DataGrid1.DataSource=dv;
    DataGrid1.DataBind();   

    if (DataGrid1.Items.Count < DataGrid1.PageSize)
    {
    btnNext.Enabled = false;
    }
    }
    private void SetListPage(int iCurrentListPage)
    {
    ViewState["CurrentListPage"]=iCurrentListPage;

    String[] values=new String[iListPageSize+2] ;

    ListBox1.Items.Clear();

     if(iTotalListPage==iCurrentListPage)
    {
    for (int i=0;i<iListPageSize;i++)
    {
    if (i==0)
    {
    values[i]="<<";
    ListBox1.Items.Add("<<");

    }
    else
    {
    values[i]=Convert.ToString((iCurrentListPage-1)*iListPageSize+i);
    ListBox1.Items.Add(Convert.ToString((iCurrentListPage-1)*iListPageSize+i));

    }
    }
    }
     else if (iCurrentListPage==1)
     {
     for (int i=0;i<=iListPageSize;i++)
     {
     if (i==iListPageSize)
     {
     values[i]=">>";
    ListBox1.Items.Add(">>");

     }
     else
     {
     values[i]=Convert.ToString((iCurrentListPage-1)*iListPageSize+i+1);
     ListBox1.Items.Add(Convert.ToString((iCurrentListPage-1)*iListPageSize+i+1));

     }
     }
     }
    else
    { for (int i=0;i<=iListPageSize;i++)
    {
    if (i==0)
    {
    values[i]="<<";
    ListBox1.Items.Add("<<");

    }
    else if (i==iListPageSize)
    {
    values[i]=(">>");
    ListBox1.Items.Add(">>");

    }
    else
    {
    values[i]=Convert.ToString((iCurrentListPage-1)*iListPageSize+i+1);
    ListBox1.Items.Add(Convert.ToString((iCurrentListPage-1)*iListPageSize+i+1));

    }
    } }
    DataList1.DataSource = values;
       DataList1.DataBind();  


    }

    private void RefreshDataForList(int iCategory)
    {


    string sSelectValue;
                   sSelectValue=DataList1.Items[iCategory].ToString();
    if (sSelectValue=="<<")
    {
    iCurrentListPage--;
    ViewState["CurrentPage"]=(iCurrentListPage+1)*iListPageSize-1; SetListPage(iCurrentListPage);
    }
    else if (sSelectValue==">>")
    {
    iCurrentListPage++;
    ViewState["CurrentPage"]=iCurrentListPage*iListPageSize+1;
    SetListPage(iCurrentListPage);
    }
    else
    {
    ViewState["CurrentPage"]=sSelectValue;
    }  
    FillGrid((int)ViewState["CurrentPage"]);


    }
    public int RowPerPage
    {
    set
    {
    iRowPerPage=value;
    }
    } public int ListPageNumber
    {
    set
    {
    iListPageSize=value;
    }
    }
    }
    }
      

  3.   

    肯定可以,你说的取不到应该是第一次运行这个页面,那当然没有值了,再刷新而且VIEWSTATE赋值正确,那肯定是有的
      

  4.   

    不行啊,简单的同一页面ViewState是可以的,我也试了http://localhost/MonthDetail.aspx?category=1
    http://localhost/MonthDetail.aspx?category=2
    这样两个页面间可以保持ViewState吗,不行的话,用什么可以解决我刚接触ASP,有些基本的概念不懂,谢谢大家了
      

  5.   

    不同页面间用Session或者直接传递参数的办法比较好。
      

  6.   

    ViewState是页面中一个隐藏的文本框的值,一个页面的ViewState只能在一个页面中有效,你要想在多个页面中传递值,可以使用url传值,Session或缓存等。
      

  7.   

    页面间不能用VIEWSTATE,VIEWSTATE是记录Web Control状态的
      

  8.   

    如果是同一个页面,就象你上面所说的
    http://localhost/MonthDetail.aspx?category=1
    http://localhost/MonthDetail.aspx?category=2当然可以使用ViewState,它的用法与Session一样
      

  9.   

    一定可以的,在page_load里面可以取到所有的控件和其他对象的值。包括viewstate的植。你注意一下页面的enabledviewstate属性,和webconfig文件内的这个属性植
      

  10.   

    private void Page_Load(object sender, System.EventArgs e)
    {
      if (!Page.IsPostBack) //加上这个判断
      {
        ViewState["Para"]="Text";
        Resposne.Write(  ViewState["Para"].ToString());
      }
    }
      

  11.   

    //sorry 晕了。该是 if (Page.IsPostBack) private void Page_Load(object sender, System.EventArgs e)
    {
      if (Page.IsPostBack) //加上这个判断
      {
        ViewState["Para"]="Text";
        Resposne.Write(  ViewState["Para"].ToString());
      }
    }