0

当我单击 btnGDynamicCont 时,我想加载第一组控件,然后在每次进一步单击该按钮时,在其他控件旁边添加一个新控件(文本框),因此每次单击它时,我都会跨状态添加一个新文本框。

你知道我应该在哪里添加新文本框的创建以便在每次回发后保留它吗?

{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Convert.ToString(ViewState["Generated"]) == "true")
            GenerateDynamicControls();

    }

    public void GenerateDynamicControls()
    {
        TextBox txtDynamic = new TextBox();
        txtDynamic.ID = "txtDynamic";
        txtDynamic.Text = "Dynamic TextBox";
        Page.Form.Controls.Add(txtDynamic);

        TextBox txtDynamic2 = new TextBox();
        txtDynamic2.ID = "txtDynamic2";
        txtDynamic2.Text = "Dynamic Textbox";
        Page.Form.Controls.Add(txtDynamic2);

    }

    protected void btnGDynamicCont_Click1(object sender, EventArgs e)
    {
        if (Convert.ToString(ViewState["Generated"]) != "true")
        {
            GenerateDynamicControls();
            ViewState["Generated"] = "true";
        }
        else
        {
            Response.Write("<h2>Controls are already exist in page</h2>");

        }
    }
}

}

4

2 回答 2

0

动态控件通常在 Page_Load 方法中重新创建。有关详细信息,请参阅在 ASP.NET 中动态创建的控件一文。

于 2013-10-28T12:07:53.150 回答
0

您可以参考以下链接,其中解决了一个非常相似的问题。

无法在 asp.net 中动态添加多个服务器控件

每次回发发生时,您应该在 page_load 事件中重新创建已经存在的控件(动态添加),并在 button_click 事件中创建新控件。

使用一些逻辑为要维护的视图状态的控件生成 id。如果回发前后生成的控件的 id 相同,则 VIEWSTATE 将被自动处理。

跟踪文本框数量的一种方法是将计数存储在会话中。

于 2013-10-28T13:32:07.310 回答