2011-09-27 48 views
1

我的页面Default.aspx继承了BasePage.cs的形式。在基页上使用“FindControl”

在基本页面中,我试图找到实际在Default.aspx中的控件Label1。

var labelControl = (TextBox)Page.FindControl("Label1"); 

但是,这总是回来为空。我可以通过基本页面找到其他页面的控件吗?

+1

Label1位于页面的根目录或其他控件(如Panel)中?请记住,FindControl不是递归的。 –

+0

它在一个面板中......并且面板在每个页面上都不相同。该控件可能位于每个页面上另一个面板的面板中。我怎样才能使它成为通用的,以便它可以在任何页面上找到Label1,而不管它在哪里。 +1为一个伟大的捕获。 – joncodo

+0

http://stackoverflow.com/questions/253937/recursive-control-search-with-linq – kd7

回答

4

FindControl不是递归的(ASP.NET团队由于性能原因未实现它)。

0

设置标签&的的ClientIDMode然后尝试找到BasePage.cs

protected override void OnLoad(EventArgs e) 
{ 
    Label lbl = this.FindControl("Label1") as Label; 


} 

希望这将帮助标签。

0

如果FindControl()没有结束工作,应该可以通过将您的控件声明为BasePage类中的属性。假设Default.aspx的和其他的.aspx页面将全部从BasePage的继承,你应该能够做到这一点:

public class BasePage 
{ 
    protected Label Label1; 

} 

在BasePage的方法,请检查您的属性不为空。如果是这样,该控件存在并且可以被操纵:

protected void SomeBasePageMethod() 
{ 
    if (this.Label1 != null) 
    { 
    // Do something with Label1 
    } 
}