Asp.net 动态添加控件和AJAX

Asp.net 动态添加控件和AJAX,asp.net,ajax,Asp.net,Ajax,让我首先指出,这不是一个容易回答的问题。至少要找到答案几乎是不可能的 在UpdatePanel中,我动态地将一些控件添加到我的面板控件中 List<Showing> showings = cBLL.GetShowings(tenant.Id); int j = 1; foreach(Showing showing in showings) { UserControl uc = (UserControl)Page

让我首先指出,这不是一个容易回答的问题。至少要找到答案几乎是不可能的

在UpdatePanel中,我动态地将一些控件添加到我的面板控件中

List<Showing> showings = cBLL.GetShowings(tenant.Id);

        int j = 1;
        foreach(Showing showing in showings)
        {
            UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx");
            uc.ID = "showing_" + j;
            uc.Visible = true;
            ((BookShowing)uc).SetShowing(showing);
            pnl_showings.Controls.Add(uc);
            j++;
        }
我得到一个空引用异常

致意 真正的纳普斯特又一次陷入困境

  • 首次添加控件时,请跟踪需要在viewstate中重新创建的控件数量
  • 在之后的每一篇文章中,确保使用LoadViewState方法中相同的ID将相同数量的控件添加回页面
  • 关键是每次回发都必须向页面添加动态创建的控件,并且必须在加载viewstate之前添加,以便控件将其表单发布值加载回页面

    BookShowing bs = (BookShowing)UpdatePanel1.FindControl("showing_" + i);
    
    解决方案是,OnInit覆盖确实有效,是我以错误的方式获取usercontrol


    关闭。

    我从未进入LoadViewState方法,为什么?我需要做些什么特别的事情来引起那个事件吗?
            if (Session["ShowingsCount"] != null)
            {
                int noOfUCs = (int)Session["ShowingsCount"];
                for (int i = 1; i < noOfUCs; i++)
                {
                    UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx");
                    uc.ID = "showing_" + i;
                    uc.Attributes.Add("runat", "Server");
                    uc.EnableViewState = true;
                    uc.Visible = true;
                    pnl_showings.Controls.Add(uc);
                }
                UpdatePanel1.Update();
            }
        }
    
    FindControl("showing_1").Visible = false;
    
    BookShowing bs = (BookShowing)UpdatePanel1.FindControl("showing_" + i);