在回发后找到一个控件

时间:2012-01-30 17:46:13

标签: c# asp.net dynamic postback web-controls

我有一张在回发时动态创建的表格;它是一个带有标准html复选框的文档列表,每行都有一个复选框。目的是能够选择&只需点击一下即可下载多个文档。

我遇到的问题是我无法访问任何复选框,我的猜测是它们不在viewstate中,因为它们不是在o​​nLoad或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个控件;我已经做了足够的工作来找到已选中的复选框,还是我还没有朝着正确的方向前进?

提前致谢!

2 个答案:

答案 0 :(得分:1)

这不是搜索控件的问题。您只需在OnInit阶段的每个请求中正确添加它们。

不要使用Literal控件添加ASP.NET服务器控件。请改用PlaceHolder等特殊容器。

然后,如果您知道控件的ID,您只需使用FindControl():

Control myControl1 = FindControl("TextBox2");

答案 1 :(得分:1)

确保按照您的提及创建它们。您可以使用IE Developer工具(F12)或页面源并检查其ID。然后你应该能够使用FindControl()。您可能需要将其强制转换为CheckBox控件,以便检查其是否已选中...