2010-02-12 8 views
1

J'ai un certain nombre de pagesImpossible de trouver le contrôle dans le code en super classe

<%@ 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 { } 

et une super classe pour eux:

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! 
    } 
} 

Pourquoi aucune méthode ne peut pas trouver un contrôle?

+0

Ceci est un doublon de http://stackoverflow.com/questions/839794/finding-a-control-in-a-page-from-a-page-base-class –

Répondre

0

Me semble que vous essayez de trouver le contrôle dans la collection de contrôle de page ce qui ne va pas. Vous devez rechercher une cellule de tableau dans le contrôle Table.

Mise à jour. Si vous utilisez une page maître, vous pouvez accéder à ses commandes directement à partir de la page. D'abord, vous devez déclarer le type de maître:

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

déclarera alors la propriété publique (qui peut être un certain contrôle aussi):

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

Ensuite, vous serez en mesure d'écrire:

string text = Master.MyTitle; 

ou

Master.FindControl('Table1'); 
+0

@sash: jusqu'à FindControl() recherche récursivement il doit aussi trouver mon contrôle. n'est-ce pas? – abatishchev

+1

Non, vous ne pouvez pas rechercher les contrôles à l'intérieur des conteneurs (GridView, ListView, Table, etc.). – sashaeve

+0

Pourquoi donc thisFindControl ("Table1") ne fonctionne pas si masterpage est utilisé. Sans ça tout va bien. Masterpage est-il une racine de ce mal? – abatishchev

1

La mos La solution commune que j'ai vu est de faire une descente récursive dans l'arbre de contrôle jusqu'à ce que vous trouviez le contrôle avec l'ID désiré, par ex. http://www.codinghorror.com/blog/archives/000307.html

+0

@flatline: Cela semble étrange mais le lien ne fonctionne pas - affiche un écran vide. Est-ce que cela fonctionne pour vous maintenant? – abatishchev

+0

@abatischev - bizarre, même chose ici, mais j'ai testé le lien avant de poster, et le cache de google a encore un record. Il me semble que c'est un problème avec codinghorror.com? En tout cas: http://www.google.com/search?q=findcontrolrecursive a un certain nombre de liens pertinents – flatline