0

我有一个包含可变行数的四列表,它需要支持单行或多行的选择。我已决定在其中一列中使用 CheckBoxes 来实现此功能,但在控件生成后我找不到读取控件状态的方法。

首先,我开始使用 JQuery 将 CheckBoxes 直接滑入客户端的表格中,假设我可以在发布表单时使用“FindControl()”来查找它。FindControl 即使在将其调整为递归搜索页面上的所有控件后也惨遭失败。

经过一番谷歌搜索后,似乎 ASP.Net 根本不允许或无法按我希望的那样运行,因此我更改了代码以将所有 CheckBoxes 添加到代码文件中的表中,并且没有区别。

由于我对使用 C# HttpListener 更加熟悉,因此我尝试回读已发布的表单数据并自行处理,结果发现 ASP 对数据使用了某种形式的加密或混淆,从而使其成为一项更耗时的任务它甚至值得看看这种方法。

我如何实现这一点几乎没有任何限制,但我对 ASP.Net 的了解还不够,无法单独解决这个问题,尤其是在谷歌让我失望之后!

如果您需要查看一些代码,请随时询问,但请具体说明。

这是我尝试用来查找控件的代码,目前它是一团糟:

// I assign the name "CHK_SEL_" + i.ToString() to the ID, but that is on a page with a master page. Examining the ID with chrome shows that the ClientID is actually MainContent_CHK_SEL_i, so I search for that too.
Control c = MyFind(this, "CHK_SEL_2");
ControlCollection cc = this.Controls; // Everything except this line, results in null. and after examining this using visual studio, I cannot manually find the controls I am after either.
Control ccc = this.FindControl("CHK_SEL_2");
Control cccc = SearchControl(this, "CHK_SEL_2");
Control ccccc = MyFind(this, "MainContent_CHK_SEL_2");
Control cccccc = this.FindControl("MainContent_CHK_SEL_2");
Control ccccccc = SearchControl(this, "MainContent_CHK_SEL_2");

private Control MyFind(Control search, string ID)
{
    int i = 0;
    Control c = search.FindControl(ID);
    if (c != null) return c;
    while (search.Controls.Count > i && (c = MyFind(search.Controls[i++], ID)) == null) ;
    return c;
}

public static Control SearchControl(Control controlToSearch, string controlID)
{
    if (controlToSearch.ID == controlID) return controlToSearch;
    for (int i = 0; i < controlToSearch.Controls.Count; i++)
    {
        Control c = SearchControl(controlToSearch.Controls[i], controlID);
        if (c != null) return c;
    }
    return null;
}
4

1 回答 1

1

您可以找到复选框状态(选中或未选中)的最简单方法如下:

        Table tbl = (Table)form1.FindControl("Table1");

        int rows = tbl.Rows.Count;
        for (int i=0; i<rows;i++)
        {
            TableRow tr = tbl.Rows[i];
            TableCell tc = tr.Cells[0];

            CheckBox cb = (CheckBox)tc.Controls[0];
            bool status = cb.Checked;
        }
于 2013-06-04T12:13:32.460 回答