提交动态复选框值时出现问题

时间:2009-03-06 04:44:22

标签: c# asp.net

我正在创建一个动态的清单列表,并参见下面的实现。我已经尝试了一个星期来获取提交按钮上的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("&nbsp; <span id='fnameID" + i + "' >test" + i + "&lt;/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();

} 

谢谢!

3 个答案:

答案 0 :(得分:3)

在加载事件运行之前,状态将恢复为控件。如果到那时你的控件还没有存在,它们将失去状态,你不会知道它们已被检查。请改为在Init或PreInit事件中创建复选框。

答案 1 :(得分:0)

将复选框创建移至CreateChildControls页面方法

要在LinkBut​​ton1_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属性?