【问题标题】:Dynamically created "CheckBoxList" in placeholder controls throwing null reference exception error during page postback在页面回发期间在占位符控件中动态创建“CheckBoxList”引发空引用异常错误
【发布时间】:2010-03-24 01:23:56
【问题描述】:

我有一个 web 表单,它将根据数据库中的行数动态创建一些填充数据的复选框列表。然后将其添加到要显示的占位符中。

点击时有一个按钮,会将选中的复选框值添加到数据库中,但现在当点击按钮时和回发后,页面将显示错误“System.NullReferenceException”。

下面的代码是写在Page_Load中的(!Page.IsNotPostBack)中,并在一个循环中会动态创建多个checkboxlist:

                CheckBoxLis chkContent = new CheckBoxList();
                chkContent.ID = chkIDString; //chkIDString is an incremental int based on the row count 
                chkContent.RepeatDirection = RepeatDirection.Horizontal;                    
                foreach (List<t> contentList in List<t>) //data retrieved as List<t> using LINQ
                {
                    ListItem contents = new ListItem();
                    contents.Text = contentList.Title;
                    contents.Value = contentList.contentID.ToString();
                    chkContent.Items.Add(contents);
                }

                plcSchool.Controls.Add(chkContent); //plcSchool is my placeholder
                plcSchool.Controls.Add(new LiteralControl("<br>"));



protected void btnAdd_Click(object sender, EventArgs e)
{
    CheckBoxList cbl = Page.FindControl("chkContent4") as CheckBoxList;
    Response.Write(cbl.SelectedValue.ToString()); // now im just testing to get the value from one of the checkboxlist     
}

任何人都可以提供帮助,因为似乎控件在回发后没有重新创建,因此它找不到控件并抛出空引用异常。

【问题讨论】:

    标签: c# postback nullreferenceexception checkboxlist


    【解决方案1】:

    编辑:这实际上是两个问题 - 控件不存在,并且它们的值不会填充。将您的控件创建移到 Page.IsPostback 检查之外会创建它们,但选择的值不会在页面生命周期的后期自动重新填充。

    所以问题是当页面进入视图状态时您的控件不存在 - 解决此问题的一种廉价方法是在 page_init 中创建动态控件。

    这是我遇到这类问题时常去的页面:http://msdn.microsoft.com/en-us/library/ms178472.aspx

    【讨论】:

      【解决方案2】:

      简短的回答是必须在每次回发时创建动态创建的控件,否则它们将不存在。您需要每次都创建控件。

      您可以通过覆盖 CreateChildControls() 来最轻松地做到这一点。这将在适当的时间创建控件,然后在页面生命周期的后期,将填充它们的 ViewState 并且它们将拾取存储在那里的任何设置。

      在您的情况下,只需将控件创建移到 !Page.IsPostback 块之外。

      【讨论】:

        猜你喜欢
        • 2018-01-25
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多