如何使用ASP.Net访问生成的控件

时间:2013-06-04 09:57:41

标签: jquery asp.net checkbox postback

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

首先,我开始使用JQuery将CheckBoxes直接放到客户端的表中,假设我可以在发布表单时使用“FindControl()”查找它。即使在调整它以递归搜索页面上的所有控件之后,FindControl仍然失败了。

经过一些谷歌搜索后,似乎ASP.Net根本不允许或按照我的希望和功能进行操作,而是改变了代码,将所有CheckBox添加到代码文件中的表中,没有区别。< / p>

由于我对使用C#HttpListener更加熟悉,我试图回读已发布的表单数据并自行处理,结果发现ASP使用某种形式的加密或混淆数据呈现它的时间更长消耗任务,甚至看看那个方法的价值。

对于我如何实现这一点几乎没有任何限制,但我根本不了解ASP.Net单独解决这个问题,特别是在谷歌让我失望之后!

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

这是我用TRIED来查找控件的代码,此刻它是一个正确的混乱:

// 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;
}

1 个答案:

答案 0 :(得分: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;
        }