【问题标题】:Cannot find Checkbox controls in page在页面中找不到复选框控件
【发布时间】:2015-02-12 17:24:23
【问题描述】:

我正在尝试获取页面上的复选框并将其文本插入数据库。当我单击提交按钮时,它没有找到任何复选框控件。我试图枚举所有这些并插入每个。我需要为此项目使用单个复选框而不是复选框列表,以防有人建议我使用列表。为什么我的控件不显示?

C# - 提交按钮

protected void Submit_Click(object sender, EventArgs e)
{
// removed code to shorten up
  foreach (Control c in Page.Controls)
  {
    foreach (Control childc in c.Controls)
    {
      if ((childc is CheckBox) && ((CheckBox)childc).Checked)
      {
         cmd.Parameters.Clear();
         cmd.Parameters.AddWithValue("@Name", ((CheckBox)childc).Text);
         cmd.Parameters.AddWithValue("@DateAdded", DateTime.Now.ToString());
         cmd.ExecuteNonQuery();
       }
    }
  }
}

C# - 创建复选框并将其插入面板的位置。我点击了一个名为 Submit_Click_Generate 的按钮,该按钮调用它并填充/创建复选框。

protected void Submit_Click_Generate(object sender, EventArgs e)
{
// removed code to shorten up
  foreach (System.Xml.XmlNode node in nodes)
  {
     string displayname = node.SelectSingleNode("FName").InnerText.Trim();
     string idnumber = node.SelectSingleNode("idNum").InnerText.Trim();
     CheckBox ckBox = new CheckBox();
     ckBox.InputAttributes.Add("value", idnumber);
     panel1.Controls.Add(new LiteralControl("<div class='checkbox checkbox-slider-lg checkbox-slider--b-flat'><label>"));
     panel1.Controls.Add(ckBox);
     panel1.Controls.Add(new LiteralControl("<span>" + displayname + "</span></label></div>"));
    }
}

我所有的复选框都动态插入到我页面上的这个面板中

.ASPX

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
   <form id="form1" runat="server">
       <asp:Button ID="btn" runat="server" OnClick="Submit_Click_Generate" Text="Generate" />
       <asp:Panel ID="panel1" runat="server"></asp:Panel>
       <asp:Button ID="btn1" runat="server" OnClick="Submit_Click" Text="Save" />
   </form>
</asp:Content>

也试过这个,但它也没有拿起控件:

foreach (var ctrl in this.Controls.OfType<CheckBox>().Where(x => x.Checked))

【问题讨论】:

  • 您是否尝试过枚举面板控件集合而不是页面?
  • 是的,我仍然没有插入任何数据。
  • 每次回发时都会创建复选框吗?
  • 是的,很抱歉,我忘了提及我单击了一个按钮来触发要创建的控件,然后单击另一个按钮将它们提交到数据库中。第一个按钮从代码隐藏生成复选框。

标签: c# asp.net checkbox webforms


【解决方案1】:

使用...

 foreach (Control childc in panel1.Controls)
  {
    if ((childc is CheckBox) && ((CheckBox)childc).Checked)
    {
       cmd.Parameters.Clear();
       cmd.Parameters.AddWithValue("@Name", ((CheckBox)childc).Text);
       cmd.Parameters.AddWithValue("@DateAdded", DateTime.Now.ToString());
       cmd.ExecuteNonQuery();
     }
  }

【讨论】:

    【解决方案2】:

    对于动态生成的控件,您需要在单击提交按钮时在页面的 onInit 事件中重新创建。根据以下链接: Why dynamically created user controls disappear when controls are not doing full postbacks

    您需要在每个 Page Init 事件中填充它们以保持 Viewstate,此外,在按钮单击期间添加到更新面板中的控件的事件似乎直到下一次回发时才会注册。我的建议是保留一个动态添加的列表,并将其存储在会话变量中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多