我正在尝试将Checkbox放在页面上并将其Text插入数据库。当我单击提交按钮时,它找不到任何Checkbox控件。我试图枚举所有这些并插入每个。我需要使用单独的复选框而不是此项目的复选框列表,以防有人建议我使用列表。为什么我的控件不显示?
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))
答案 0 :(得分:0)
使用...
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();
}
}
答案 1 :(得分:0)
对于动态生成的控件,当您单击“提交”按钮时,需要在页面的onInit事件中重新创建。根据以下链接: Why dynamically created user controls disappear when controls are not doing full postbacks
您需要在每个Page Init事件中填充它们以便持久存储Viewstate,在按钮点击期间添加到更新面板内的控件的事件似乎在下一个Postback之前不会被注册。我的建议是保留一份动态添加的列表,并将其存储在会话变量
中