保留选择用户控件内的下拉列表

时间:2013-02-22 10:24:33

标签: asp.net user-controls viewstate

我看过其他几篇与此相关的帖子,但我对我的代码有疑问。亲切地忍受我。

我有用户控件,它有一个文本boa和一个下拉列表以及一些自定义验证器。 用户控件通过代码动态添加。

我正在使用以下代码来加载用户控件本身内的下拉列表

protected void Page_Load(object sender, EventArgs e)
    {            
        ddl_RRC.DataSource = dicRC_Desc;
        ddl_RRC.DataTextField = "value";
        ddl_RRC.DataValueField = "key";
        ddl_RRC.DataBind();

        txtRC.Text = Request.Form[txtRC.UniqueID];   //To retain the value of text box         
    }

我在Page_Init

上动态添加用户控件
 protected void Page_Init(object sender, EventArgs e)
    {
        if (GetPostBackControl(this) == "btnNewRow")
        {
            custControlCountID++;
        }
        for (int i = 0; i < custControlCountID; i++)
        {
            RejRow customControl = (RejRow)LoadControl("~/RejRow.ascx");
            customControl.ID = "rejRow" + i;
            divHolder.Controls.Add(customControl);
        }
    }

为文本框和下拉列表启用了Viewstate。 由于我在Page_Init中添加控件时使用相同的ID,为什么控件没有从viewstate获取值?

1 个答案:

答案 0 :(得分:0)

我认为唯一的问题是你是否在DropDownList的每个回发上对Page_Load进行了数据绑定。只需检查IsPostback - 属性,例如:

protected void Page_Load(object sender, EventArgs e)
{       
    if(!IsPostBack)
    {     
        ddl_RRC.DataSource = dicRC_Desc;
        ddl_RRC.DataTextField = "value";
        ddl_RRC.DataValueField = "key";
        ddl_RRC.DataBind();
    }

    txtRC.Text = Request.Form[txtRC.UniqueID];   //To retain the value of text box         
}

但是,我不确定为什么你需要在表单字段中设置TextBox.Text属性,因为它应该在Text中存储它ViewState