0

我看过其他两篇与此相关的帖子,但我对我的代码有疑问。所以请多多包涵。

我有用户控件,它有一个文本 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);
        }
    }

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

4

1 回答 1

0

我认为唯一的问题是您DropDownList在每次回发时都要对Page_Load. 只需检查IsPostback-property,例如:

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从表单字段设置属性,因为它也应该存储TextViewState.

于 2013-02-22T10:28:34.423 回答