我的页面Default.aspx继承了BasePage.cs的形式。在基页上使用“FindControl”
在基本页面中,我试图找到实际在Default.aspx中的控件Label1。
var labelControl = (TextBox)Page.FindControl("Label1");
但是,这总是回来为空。我可以通过基本页面找到其他页面的控件吗?
我的页面Default.aspx继承了BasePage.cs的形式。在基页上使用“FindControl”
在基本页面中,我试图找到实际在Default.aspx中的控件Label1。
var labelControl = (TextBox)Page.FindControl("Label1");
但是,这总是回来为空。我可以通过基本页面找到其他页面的控件吗?
FindControl不是递归的(ASP.NET团队由于性能原因未实现它)。
设置标签&的的ClientIDMode然后尝试找到BasePage.cs
protected override void OnLoad(EventArgs e)
{
Label lbl = this.FindControl("Label1") as Label;
}
希望这将帮助标签。
如果FindControl()没有结束工作,应该可以通过将您的控件声明为BasePage类中的属性。假设Default.aspx的和其他的.aspx页面将全部从BasePage的继承,你应该能够做到这一点:
public class BasePage
{
protected Label Label1;
}
在BasePage的方法,请检查您的属性不为空。如果是这样,该控件存在并且可以被操纵:
protected void SomeBasePageMethod()
{
if (this.Label1 != null)
{
// Do something with Label1
}
}
Label1位于页面的根目录或其他控件(如Panel)中?请记住,FindControl不是递归的。 –
它在一个面板中......并且面板在每个页面上都不相同。该控件可能位于每个页面上另一个面板的面板中。我怎样才能使它成为通用的,以便它可以在任何页面上找到Label1,而不管它在哪里。 +1为一个伟大的捕获。 – joncodo
http://stackoverflow.com/questions/253937/recursive-control-search-with-linq – kd7