c# - 在回发中获取复选框后面的代码

标签 c# asp.net postback

我想在 page_load 中表格的每一行的开头添加一些复选框:(我将它们添加到 asp:placeholder 中)

 protected void Page_Load(object sender, EventArgs e)
    {
        Table dtTable = new Table();
        TableHeaderRow dtHeaderRow = new TableHeaderRow();

        TableHeaderCell dtHeaderCheckbox = new TableHeaderCell();
        dtHeaderCheckbox.Controls.Add(dtHeaderCkBox);
        dtHeaderRow.Cells.Add(dtHeaderCheckbox);

        foreach (DataColumn col in _ds.Tables[0].Columns)
        {
                TableHeaderCell dtHeaderCell = new TableHeaderCell();
                dtHeaderCell.Text += col.ColumnName;
                dtHeaderRow.Cells.Add(dtHeaderCell);
        }

        dtTable.Rows.Add(dtHeaderRow);

        TableRow row;

        for (int i = 0; i < _ds.Tables[0].Rows.Count; i++)
        {

            row = new TableRow();

            TableCell dtCell = new TableCell();
            CheckBox ckBox = new CheckBox();
            ckBox.ID = "chkBox_" + _ds.Tables[0].Rows[i]["IDENTIFIER"].ToString();
            ckBox.AutoPostBack = false;
            ckBox.EnableViewState = false;

            dtCell.Controls.Add(ckBox);
            row.Cells.Add(dtCell);

            for (int j = 0; j < _ds.Tables[0].Columns.Count; j++)
            {
                TableCell cell = new TableCell();
                cell.Text = _ds.Tables[0].Rows[i][j].ToString();

                row.Cells.Add(cell);
            }

            dtTable.Rows.Add(row);

        }

        phUnconfirmedDiv.Controls.Add(dtTable);
    }

现在的问题是,当用户按下提交按钮(和回发)时,我无权访问我的复选框:

    protected void btnAccept_OnClick(object sender, EventArgs e)
    {
        List<CheckBox> chkList = new List<CheckBox>();
        foreach (Control ctl in form1.Controls)
        {
            if (ctl is CheckBox)
            {
                if (ctl.ID.IndexOf("chkBox_") == 0)
                {
                    chkList.Add((CheckBox)ctl);
                }
            }
        }
        ScriptManager.RegisterStartupScript(this, GetType(), "event", "alert('" + chkList.Count + "');", true);
    }

最佳答案

动态生成的控件一旦呈现在 View 上就会丢失其状态。对于您来说,要在后台代码中再次访问它们,当您回发时,您将必须重新创建它们,之后您将能够操作它们。

就获取复选框的选中值而言,您可以尝试这样的操作。这可能不准确,但应该给出一个想法。

这将是您的复选框:

<input type="checkbox" id="yourId" name="selectedIds" value="someValue"/>

在你的代码隐藏中:

value = Request.Form["selectedIds"];

希望这有帮助。

关于c# - 在回发中获取复选框后面的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29767648/

相关文章:

c# - 在数据透视表无法削减并且数据来自许多地方的情况下,如何自动化地按计划进行报告?

asp.net - 为什么我无法从事务回滚中恢复?

c# - 如何从 C# 函数的存储过程返回多个输出参数

javascript - 什么时候回发不是回发? (根据 ASP.net)

c# - 最初禁用的按钮在通过 Javascript 启用后不会回发

c# - 如何将 List<T> 序列化为 XML?

c# - 从母版页调用函数

c# - 使用列表和并行循环时出现异常

c# - 具有XML数据源的Ext.NET GridPanel

ajax - 当 AjaxFileUpload 触发 UploadComplete 事件时访问其他控件值