【问题标题】:How can I add a new dynamic control on button click?如何在按钮单击时添加新的动态控件?
【发布时间】:2013-11-07 04:38:39
【问题描述】:

当我单击 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>");

        }
    }
}

}

【问题讨论】:

    标签: asp.net visual-studio-2012 dynamic


    【解决方案1】:

    动态控件通常在 Page_Load 方法中重新创建。更多信息请参考Dynamically Created Controls in ASP.NET文章。

    【讨论】:

    • 我当前添加的那些在page_load中,问题是如果我不想添加预定义的控件,而是每次单击时添加一个新实例(我这样做)然后它创建第一个并且永远不会创建第二个控件。我已经尝试过没有 ID 等,希望它会继续在页面上创建控件,但它没有。
    • 我不确定我是否理解您的评论 :(。无论如何,如果您希望以前创建的控件出现在页面上,您应该在每次向服务器发出请求时重新创建它们。
    【解决方案2】:

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

    unable to add more than one server control dynamically in asp.net

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

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

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

    【讨论】:

    • 我现在已经用下面的代码更接近了,我仍然有一些我无法解决的问题 1) 第一次添加了大约 2 个框 2) (这很奇怪)文本框不仅在回发期间保留,而且在页面刷新、浏览器关闭、调试停止、不同浏览器等之后都会保留。这是怎么回事?
    • 是的,在引用的示例中,默认添加了 2 行。如果需要,您可以删除它们。这些是 aspx 中的静态行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多