2010-02-12 90 views
1

代碼控制我有一些無法找到在超類

<%@ Page Language="C#" AutoEventWireup="True" CodeBehind="MyPage.aspx.cs" Inherits="MyPage " MasterPageFile="~/Site.master" %> 
<asp:Content ContentPlaceHolderID="commonForm" runat="server"> 
<asp:Table runat="server"> 
    <asp:TableRow> 
    <asp:TableCell ID="cellControl" /> 
    </asp:TableRow> 
</asp:Table> 
</asp:Content> 

public partial class MyPage : MySuperPage { } 

頁和一個超類爲他們:

public abstract class MySuperPage : Page 
{ 
    public MySuperPage() 
    { 
     this.Load += new EventHandler(PageLoad); 
    } 

    // my own method 
    protected void PageLoad(object sender, EventArgs e) 
    { 
     var c = this.FindControl("cellControl"); // null! 
    } 

    // auto event handling 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var c = this.FindControl("cellControl"); // null! 
    } 
} 

爲什麼沒有方法無法找到控制?

+0

這是一個重複http://stackoverflow.com/questions/839794/finding-a-control-in-a--page-from-a-page-base-class –

回答

0

對我來說,你正試圖在頁面控件集合中找到控件出了什麼問題。您必須在Table控件中搜索表格單元格。

Upd。如果您使用母版頁,則可以直接從頁面訪問其控件。首先,你必須聲明主類型:

<%@ MasterType VirtualPath="~/MasterPage.master" %> 

然後聲明公共財產(可以是一些控制太):

public string MyTitle 
{ 
    get { return "BaseMaster Title"; } 
} 

然後你就可以寫:

string text = Master.MyTitle; 

Master.FindControl('Table1'); 
+0

@sash:儘可能FindControl ()遞歸搜索它也必須找到我的控制。不是嗎? – abatishchev

+1

不,你不能在容器內部控制控件(GridView,ListView,Table等等)。 – sashaeve

+0

爲什麼如果使用masterpage,this.FindControl(「Table1」)也不起作用。沒有它,一切正常。 masterpage是這個邪惡的根源嗎? – abatishchev

1

mos我見過的通用解決方案是在控制樹下進行遞歸下降,直到找到具有所需ID的控件爲止,例如, http://www.codinghorror.com/blog/archives/000307.html

+0

@flatline:看起來很奇怪,但鏈接不起作用 - 顯示空白屏幕。它現在對你有用嗎? – abatishchev

+0

@abatischev - 奇怪,這裏同樣的事情,但我測試了發佈前的鏈接,並且google緩存仍然有記錄。認識這是codinghorror.com的問題?無論如何:http://www.google.com/search?q=findcontrolrecursive都有一些相關的鏈接 – flatline