在Page_LoadComplete中找不到HTMLControl

时间:2014-07-29 06:48:17

标签: c# asp.net master-pages page-lifecycle

我创建了一个基页面类,它具有一些默认功能,可以将控件添加到页面上的div。此页面名为BasePage。

public abstract class BasePage : System.Web.UI.Page
{
    public String FormId;
    public BasePage() : this("EntityForm")
    {            
    }

    public BasePage(String formId)
    {
        this.FormId = formId;
    }       

    protected virtual void Page_LoadComplete(object sender, EventArgs e)
    {
        this.FindControl(this.FormId); // returns null;
    }
}

// Derived class
public partial class _default : BasePage
{
    public _default("test")
    {
    }

    protected override void Page_Load(object sender, EventArgs e)
    {
        //base.Page_Load(sender, e);
    }
}

// ASPX code
<asp:Content ID="Content1" ContentPlaceHolderID="cphHead" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cphCenter" runat="server">
    <div id="test" runat="server" class="frmData">    
    </div>    
</asp:Content>

我已经为页面提供了相同的功能而没有连接到母版页文件,它可能与此有关。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

使用递归FindControl扩展方法查找控件:

C#, FindControl

private Control FindControlRecursive(Control ctrl, string id)
{
    if(ctrl.ID == id)
    {
        return ctrl;
    }
    foreach (Control child in ctrl.Controls) 
    { 
        Control t = FindControlRecursive(child, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 
    return null;
}