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