0

我尝试制作一个简单的应用程序,其中有一个包含 1 到 4 的数字的下拉列表。

根据用户选择的数量 - 我使用绑定的checkedchanged事件动态创建这个数量的复选框。因此,当用户检查某些复选框时,会引发 checkchanged 事件,并且我将选中复选框的文本存储在会话中,然后当我单击按钮时,我只想从选中的复选框中查看文本。

但似乎 checkchanged 事件处理程序从未被触发。

先感谢您

public partial class proba : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        dd1.Items.Add("1");
        dd1.Items.Add("2");
        dd1.Items.Add("3");
        dd1.Items.Add("4");





    }

    protected void dd1_SelectedIndexChanged1(object sender, EventArgs e)
    {
        int numTourists = Convert.ToInt32(dd1.SelectedItem.Text);

        for (int i = 0; i < numTourists; i++)
        {
            CheckBox chk = new CheckBox();
            chk.ID = "chk" + i;
            chk.Text = "box" + i;

            chk.CheckedChanged += new EventHandler(checkChanged);
            Page.FindControl("form1").Controls.Add(chk);


        }
    }

    protected void checkChanged(object sender, EventArgs e)
    {
        CheckBox chk = (CheckBox)sender;

        lblpr.Text += chk.Text;

        Session["chk"] = chk.Text;


    }

    protected void btnpr_Click(object sender, EventArgs e)

    {
        lblpr.Text = "length" + ((String [] )Session["chk"]).Length;
        for (int k = 0; k < ((String[] )Session["chk"]).Length; k++)
        {
            lblpr.Text += ((String [])Session["chk"])[k];


        }
    }




}
4

2 回答 2

2

您需要将AutoPostBack复选框的属性设置为 true 以便在检查更改时回发

chk.AutoPostBack = true;

并阅读此内容

将事件处理程序添加到动态创建的复选框(aspx,c#)

更改页面加载,您无需在每个页面回发中一次又一次地添加项目

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
     {
      //Load dd1
     }
}

但是您需要在回发的每个页面上添加动态控件,最好在 OnInit 上执行,如建议链接中的上述答案

于 2013-05-18T09:01:42.200 回答
2

由于您正在动态创建复选框,因此当有回帖时它会丢失。因此,您需要在页面加载事件之前再次添加它们,以便在页面加载事件期间它们对 .net 可见,因此 .net 可以触发相应的事件。

B4 你潜入动态控制是个好主意,可以在http://www.4guysfromrolla.com/articles/092904-1.aspx找到基础知识

于 2013-05-18T09:03:22.900 回答