我有一个页面a.aspx和一个用户控件b.ascx,因为b.ascx是一个公共控件,它接收一个数据库的表名,然后根据接收到的不同字符串把自带的DataGrid绑定到不同的数据表。所以我在b.ascx中设置了一个属性:
private string _table;
public string Table
  {
    get
    {
      return _table;
    }
    set
    {
      if(value != "" && value != null)
      {
        _table=value;
      }
    }
}然后我在a页面加载的时候将表名赋给b的属性:
protected DataGrids DataGrid1 =new DataGrids();//DataGrid1为b控件的ID
private void Page_Load(object sender, System.EventArgs e)
{
  if(!IsPostBack)
  {
    DataGrid1.Table="aspx_csharp";
  }
}现在在b控件加载时能获_table的值,但在按钮事件中得到的值却为空:
private void Page_Load(object sender, System.EventArgs e)
{
  if(!IsPostBack)
  {
    Response.Write(_table);//此处能正常输出"aspx_csharp"
  }
}
......
private void lnkbFirst_Click(object sender, System.EventArgs e)//首页
{
  Response.Write(_table);//在按钮的事件中却获取到空值,输出为空。
}不都是在同样的用户控件类里吗,为什么Page_Load中能获取私有域的值,而按钮的Click事件却无法获取呢?盼高手解答,不甚感激!!

解决方案 »

  1.   

    protected DataGrids DataGrid1;//DataGrid1为b控件的ID
    private void Page_Load(object sender, System.EventArgs e)
    {
      if(!IsPostBack)
      {
        DataGrid1.Table="aspx_csharp";
      }
    }表名建议放在ViewState中,这样PostBack之后也能取回值。
    public string Table
      {
        get
        {
          if(ViewState["TableName"] != null)
          {
            return ViewState["TableName"].ToString();
          }
          else
          {
            return "";
          }
        }
        set
        {
          ViewState["TableName"] = Value;
        }
    }
      

  2.   

    处理click事件时是首先执行一下page_load
    这时b。ascx里面的就没有被赋值了
      

  3.   

    public string Table
      {
        get
        {
          return ViewState.Item["table"];
        }
        set
        {
          if(value != "" && value != null)
          {
            ViewState.Item["table"]=value;
          }
        }
    }