【问题标题】:get code behind checkboxes in postback在回发中获取复选框后面的代码
【发布时间】:2015-04-22 15:45:21
【问题描述】:

我想在 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);
    }

【问题讨论】:

标签: c# asp.net postback


【解决方案1】:

动态生成的控件一旦呈现在视图中就会丢失其状态。对你来说,要在你的代码隐藏中再次访问它们,当你的回发时,你必须重新创建它们,然后你就可以操作它们。

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

这将是您的复选框:

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

在你的代码隐藏中:

value = Request.Form["selectedIds"];

希望这会有所帮助。

【讨论】:

  • 问题是我不知道复选框的全名。它们都以'chkBox_'开头,后跟一个随机数。让我们说像一个时间戳。是否可以搜索所有以'chkBox_'开头的Request.Form?
  • 从初期使用CheckBoxList怎么样?
  • 那是我的第一次尝试,但我不能只将列表中的一项添加到每一行。所有项目仅添加到表格的一个单元格中。..
  • 在您的情况下使用table 是强制性的,或者您也可以使用GridView 控制实现相同的目的并解决此问题。
  • 其实我之前没用过GridView。那么当我使用 GridView 时,我还可以使用 CheckBoxList 吗?
【解决方案2】:

我现在设法解决了这个问题。谢谢大家的提示!

所有选中的复选框都通过回发发送。所以“最简单”的方法是搜索所有参数,在回发中发送,以“chkBox_”开头,然后将它们保存在列表/数组中。所以我知道我的数据库中应该更新哪些数据:

    protected void btnAccept_OnClick(object sender, EventArgs e)
    {
        List<String> chkList = new List<String>();

        //  All checked checkboxes are sent via the postback. Save this parameters in a list:
        foreach (string s in Request.Params.Keys)
        {
            if (s.ToString().IndexOf("chkBox_") == 0)
            {
                chkList.Add(s.ToString());
            }
        }

【讨论】:

    【解决方案3】:

    按钮的用户界面控件上的 autopostback 是否设置为 true?艾:

    &lt;telerik:RadButton runat="server" ID="rBtnRelease" Text="Release" Width="100px" OnClick="rBtnRelease_Click" AutoPostBack="False"/&gt;

    当人们试图在客户端和服务器端之间来回获取数据时,这通常是常见的错误。

    【讨论】:

    • Sorry zeroOne,我的意思是设置为 true。
    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多