我做个个简单的用户控件,test.ascx,就放一个列表框,和一个public string sName属性,如下:
public partial class UserControl_test : System.Web.UI.UserControl
{
    public string sName;
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        sName = DropDownList1.SelectedItem.Value;
    }
}然后我在外面的页面a.aspx中放入该控件,点击一个获取控件里的sName值,
<uc1:test ID="test1" runat="server" />    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = test1.sName;  //值为空,,控件里的 DropDownList1_SelectedIndexChanged也触发了,求救则个。
    }

解决方案 »

  1.   


    方法一:在a.aspx页面中声明一下那个用户控件 <uc1:test ID="test1" runat="server" />protected   UserControl_test userControl;
    protected void Button1_Click(object sender, EventArgs e)
    {
      Label1.Text = userControl.sName;
    }方法二:为你的用户控件添加一个Setterpublic partial class UserControl_test : System.Web.UI.UserControl
    {
       public   string   SName 
      { 
         get{ return  ViewState["sName"];} 
         set{ ViewState[ "sName"] = value;} 
      }  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
      {
         ViewState["sName"] = DropDownList1.SelectedItem.Value;
      }
    }<uc1:test ID="test1" runat="server" />protected void Button1_Click(object sender, EventArgs e)
    {
       Label1.Text = ViewState["sName"].ToString();
    }
      

  2.   

    单击按钮后重新实例化页面了,成员变量sName又没有viewstate的,所以初始化为null。
    改成Label1.Text = (test1.FindControl("DropDownList1") as DropDownList)).SelectedValue就能取到。
      

  3.   

    测试了一下,完全正常啊,代码如下:
    namespace MyWebTest.Usercontrol
    {
        public partial class WebUserControl1 : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {        }
            public string sName;
            protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
            {            sName = DropDownList1.SelectedItem.Value;
            }
        }
    }
    使用:
     protected void Button2_Click(object sender, EventArgs e)
            {
                TextBox2.Text = WebUserControl11.sName;
            }
    结果很正常啊,取到选中项的值。