我正在创建一个动态的清单列表,并参见下面的实现。我已经尝试了一个星期来获取提交按钮上的fnameID文本值单击以将值发送到数据库。我不想在每次检查时使用回发oncheckedchanged.on因为核对表超过1000行,每次回发/重新加载会浪费太多资源。我只是希望能够使用某种方法来获取已检查的值,以便我可以在提交按钮“Click Me!”中将它们插入到数据库中。点击。
我用Google搜索并找到了FindControl方法,但我仍然无法获取fnameID值。我得到一个未定义或它错误的我。任何帮助将不胜感激!谢谢!
ASPX:
<div id="aGAccountabilityCheckListBox">
"Panel1" runat="server">
<asp:LinkButton ID="LinkButton1" Width="66px" runat="server" onclick="LinkButton1_Click">
Click Me!
</asp:LinkButton>
代码背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 50; i++)
{
CheckBox _checkbox = new CheckBox();
_checkbox.ID = "dynamicCheckListBox" + Convert.ToString(i);
Panel1.Controls.Add(_checkbox);
Panel1.Controls.Add(" <span id='fnameID" + i + "' >test" + i + "</span>");
}
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["cnDatabase"].ToString());
SqlCommand cmd = new SqlCommand("usp_CreateUser", cn);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
谢谢!
答案 0 :(得分:3)
在加载事件运行之前,状态将恢复为控件。如果到那时你的控件还没有存在,它们将失去状态,你不会知道它们已被检查。请改为在Init或PreInit事件中创建复选框。
答案 1 :(得分:0)
将复选框创建移至CreateChildControls
页面方法
要在LinkButton1_Click处理程序中检索复选框状态,您可以使用以下代码
for (int i = 0; i < 50; i++)
{
string cbxId = string.Format("dynamicCheckListBox{0}", i);
CheckBox _checkbox = Panel1.FindControl(cbxId) as CheckBox;
if (_checkbox == null )
continue;
if ( _checkbox.Checked )
//do something
}
答案 2 :(得分:0)
您的fnameID是作为文字控件创建的跨度。如果以这种方式进行设置,您将无法获得回发价值。它只是来自asp.net视角的任意html或文本。
为什么不使用CheckBox的Text属性?