【问题标题】:why chk.Checked ChangedEventHandler is not triggered and i get the exception Object reference not set to an instance of an object为什么 chk.Checked ChangedEventHandler 没有被触发并且我得到异常对象引用未设置为对象的实例
【发布时间】:2013-05-18 17:09:15
【问题描述】:

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

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

但似乎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];


        }
    }




}

【问题讨论】:

  • 哪一行出现异常?

标签: asp.net


【解决方案1】:

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

chk.AutoPostBack = true;

同时阅读这篇文章

adding an event handler to a dynamically created checkbox (aspx, c#)

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

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

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

【讨论】:

  • 你能给我一个例子,说明如何在这个回发事件上重新创建控件,所以据我所知,我应该在 eveventhandler 函数中重新创建控件
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多