我有一张在回发时动态创建的表格;它是一个带有标准html复选框的文档列表,每行都有一个复选框。目的是能够选择&只需点击一下即可下载多个文档。
我遇到的问题是我无法访问任何复选框,我的猜测是它们不在viewstate中,因为它们不是在onLoad或onInit上创建的。
好的,所以客户选择他们的文件类别&单击“获取文档”按钮。然后命中数据库并创建包含复选框的html行。然后将HTML加载到标记之间的文字中。
更新
好的,所以我没有使用并通过后面的代码创建了行和单元格。我现在可以通过Trace看到Conrol Tree中的复选框。
ctl00 $ ContentPlaceHolder1 $ 639eec32-f1a8-4fbb-a442-d429571fc3a5 System.Web.UI.WebControls.CheckBox
这就是我试图找到的复选框:
public static Control FindControlRecursive(Control Root, string Id) {
if (Root.ID == Id) return Root;
foreach (Control Ctl in Root.Controls) {
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null) return FoundCtl;
}
return null;
}
FindControlRecursive函数运行时;它只能看到页面上的5个控件;我已经做了足够的工作来找到已选中的复选框,还是我还没有朝着正确的方向前进?
提前致谢!
答案 0 :(得分:1)
这不是搜索控件的问题。您只需在OnInit阶段的每个请求中正确添加它们。
不要使用Literal控件添加ASP.NET服务器控件。请改用PlaceHolder等特殊容器。
然后,如果您知道控件的ID,您只需使用FindControl():
Control myControl1 = FindControl("TextBox2");
答案 1 :(得分:1)
确保按照您的提及创建它们。您可以使用IE Developer工具(F12)或页面源并检查其ID。然后你应该能够使用FindControl()。您可能需要将其强制转换为CheckBox控件,以便检查其是否已选中...