Asp.net 为什么chk.Checked ChangedEventHandler没有被触发,并且我得到的异常对象引用没有设置为对象的实例

Asp.net 为什么chk.Checked ChangedEventHandler没有被触发,并且我得到的异常对象引用没有设置为对象的实例,asp.net,Asp.net,我尝试制作一个简单的应用程序,其中我有一个tems下拉列表,数字从1到4 根据用户选择的编号,我会使用绑定的checkedchanged事件动态创建此数量的复选框。因此,当用户选中某些复选框时,将引发checkedchanged事件,我将选中复选框的文本存储在会话中,然后当我单击按钮时,我只希望看到选中复选框中的文本 但checkedchanged事件处理程序似乎从未触发 先谢谢你 public partial class proba : System.Web.UI.Page { pro

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

根据用户选择的编号,我会使用绑定的checkedchanged事件动态创建此数量的复选框。因此,当用户选中某些复选框时,将引发checkedchanged事件,我将选中复选框的文本存储在会话中,然后当我单击按钮时,我只希望看到选中复选框中的文本

但checkedchanged事件处理程序似乎从未触发

先谢谢你

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];


        }
    }




}
公共部分类proba:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
dd1.项目。添加(“1”);
dd1.项目。添加(“2”);
dd1.项目。添加(“3”);
dd1.项目。添加(“4”);
}
受保护的void dd1\u SelectedIndexChanged1(对象发送方,事件参数e)
{
int numTourists=Convert.ToInt32(dd1.SelectedItem.Text);
for(int i=0;i
您需要将复选框的
AutoPostBack
属性设置为true,以便在复选框更改时回发

chk.AutoPostBack = true;
也读一下这个

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

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

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

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

chk.AutoPostBack = true;
也读一下这个

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

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

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

因为您是动态创建复选框的,所以当有回帖时,它会丢失。 所以您需要在pageload事件之前再次添加这些事件,以便在pageload事件期间,它们对.net可见,因此.net可以触发相应的事件


B4当您深入到动态控制中时,最好获取可在

中找到的基本复选框,因为您是动态创建复选框的,当有回发时,它会丢失。 所以您需要在pageload事件之前再次添加这些事件,以便在pageload事件期间,它们对.net可见,因此.net可以触发相应的事件


B4您深入了解动态控制这是一个好主意,可以在

中找到基本的,哪一行您得到异常?哪一行您得到异常?您能给我一个示例,说明如何在这个回发事件中直接创建控件,根据我的理解,我应该在eveventhandler函数中重新创建控件,你能给我一个如何在这个回发事件中直接创建控件的例子吗?根据我的理解,我应该在eveventhandler函数中重新创建控件