【问题标题】:Dynamic created radio buttons wont execute event on click动态创建的单选按钮不会在点击时执行事件
【发布时间】:2014-01-31 20:27:02
【问题描述】:

我的表单中有一个名为“添加单选按钮”的按钮,以及一个名为 TexBox1 的文本框。

我编写了代码,当我单击“添加单选按钮”时,它会生成一个单选按钮;它自己的名字:

c#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewState["Counter"] = 0;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i <= Convert.ToInt32(ViewState["Counter"]); i++)
        {
            HtmlGenericControl div = new HtmlGenericControl("div");
            RadioButton rb = new RadioButton();
            rb.ID = i.ToString();
            rb.Text = "Button" + i.ToString();
            rb.GroupName = "RB";
            rb.CheckedChanged += radioButton_CheckedChanged;

            div.Controls.Add(rb);
            Panel1.Controls.Add(div);
        }

        ViewState["Counter"] = Convert.ToInt32(ViewState["Counter"]) + 1;
    }
    private void radioButton_CheckedChanged(object sender, EventArgs e)
    {
        RadioButton btn = sender as RadioButton;
        TextBox1.Text = btn.Text;
    }

}

ASP

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:Panel ID="Panel1" runat="server">
        </asp:Panel>
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Add RadioButton" />

    </div>
    </form>
</body>
</html>

问题是,在创建了几个单选按钮后,我希望程序像检查每个单选按钮一样工作,TextBox1.Text 获取单选按钮的文本字符串(按钮的名称),但函数 radioButton_CheckedChanged 没有t 执行。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我想你错过了这个

    rb.CheckedChanged +=new EventHandler(rb_CheckedChanged);
    

    请在下方查看我的 cmets

    【讨论】:

    • 不过,我在我身边运行它,我遇到了麻烦。如果有任何变化,我会发布一些东西。坚持住
    • 老兄,您还必须创建一个回发,单选按钮,无论是否以动态方式创建,在它的 CheckedChanged 中都不会触发回发
    • 感谢您的回复...我确实添加了代码事件处理程序,然后回帖...当我单击单选按钮时,它们都消失了,并且文本框仅保留在页面中而没有任何字符串...我必须再次单击按钮才能看到 rb,s
    • 您可以在代码后面创建一个单选按钮列表,将它们存储在会话状态中,而不是创建新的。然后在加载中,您只需检索它们。也许这就是他们没有触发事件的原因
    【解决方案2】:

    您应该将 Autopostback 属性设置为 true

     rb.AutoPostBack = true;
    

    【讨论】:

    • 感谢回复。在 Button1_click 代码中将 autoPostBack 设置为 true,但是当我单击生成的动态单选按钮时,整个页面似乎都被刷新了,所有单选按钮都消失了,而且文本框保持为空
    • 据我在您的代码中看到的,您可以使用 RadioButtonList 控件。这样您就不必编写更多代码了。
    【解决方案3】:
    this is how its should be imo:
    
    protected void Button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i <= Convert.ToInt32(ViewState["Counter"]); i++)
            {
                HtmlGenericControl div = new HtmlGenericControl("div");
                RadioButton rb = new RadioButton();
                rb.ID = i.ToString();
                rb.Text = "Button" + i.ToString();
                rb.GroupName = "RB";
                rb.CheckedChanged += +=new EventHandler(radioButton_CheckedChanged);
    
                div.Controls.Add(rb);
                Panel1.Controls.Add(div);
            }
    
            ViewState["Counter"] = Convert.ToInt32(ViewState["Counter"]) + 1;
        }
        private void radioButton_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton btn = sender as RadioButton;
            TextBox1.Text = btn.Text;
        }
    

    【讨论】:

    • 解释一下这里与原始的有问题的代码有什么不同会很有帮助。我不想通过比较来发现您所做的更改。
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 2014-02-13
    • 2014-01-26
    • 2017-02-10
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多