我有一个包含可变行数的四列表,它需要支持单行或多行的选择。我已决定在其中一列中使用 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;
}