Domanda

In un sito, sto solo con un unico livello Masterpage e in una pagina utilizzando quel maestro, posso fare this.Master.FindControl ( "controlName") per accedere al controllo. Funziona bene.

Tuttavia, utilizzando lo stesso codice su un sito con due livelli masterpage. MainMaster e SpecificMaster che ha MainMaster come il suo Maestro.

Quindi, nella pagina che utilizza SpecificMaster, FindControl sta tornando nullo per l'oggetto. L'unica differenza che vedo è la nidificazione delle masterpages.

Quando ho impostato punto di interruzione e guardo page.Master, sta mostrando SpecificMaster e SpecificMaster sta mostrando MainMaster come il suo padrone in modo corretto, ma FindControl non riesce ancora.

Quando ho vista origine in IE, il controllo è correttamente chiamato, non munging NET in corso.

Ogni pensiero qui?

TIA!

È stato utile?

Soluzione

Quando si nidificano pagine master, si otterrà un contenitore "Contenuto" in più è necessario guardare attraverso.

Di conseguenza, se si sta cercando di utilizzare FindControl da una data pagina figlio il solito approccio è qualcosa per l'effetto di:

Label myLabel = (Label)this.Master.FindControl("myLabel");
myLabel.Text = "Success!";

Dal momento che abbiamo una pagina master nidificate, con "myLabel" nel master bambino, questo controllo sarà contenuta all'interno di un controllo dei contenuti.

Quindi, questo cambia il codice:

ContentPlaceHolder ph = (ContentPlaceHolder)this.Master.Master.FindControl("yourContentPane");

Label myLabel = (Label)ph.FindControl("myLabel");
myLabel.Text = "Success!";

e VB.NET

Dim ph As ContentPlaceHolder = DirectCast(Me.Master.Master.FindControl("yourContentPane"), ContentPlaceHolder)

Dim myLabel As Label = DirectCast(ph.FindControl("myLabel"), Label)
myLabel.Text = "Success!"

Il contenuto della pagina figlio viene caricato nel primo controllo pagina master, che viene successivamente caricato nella pagina master nonni.

Altri suggerimenti

hai provato this.Master.Master.FindControl("controlname");?

Si sta lavorando anche per cross-page postback:

ContentPlaceHolder ph = (ContentPlaceHolder) PreviousPage.Master.FindControl ( "ContentPlaceHolder");

stringa txt = ((TextBox) (ph.FindControl ( "UserTextBox"))) Testo;.

Di solito faccio questo:

(TextBox)this.Master.FindControl("ContentplaceHolder1").FindControl("TextBox1");
HyperLink hl = (HyperLink)Master.Master.FindControl("HyperLink3");

Questo è il modo più semplice per trovare i controlli dalle pagine master nidificate.

Il mio scenario è stato il seguente. Non sono sicuro se questa configurazione è quella giusta, ma mi ha permesso di avere impostazioni di pagina master-submaster, ed essere in grado di trovare il controllo.

MasterPage-> SubMasterPage -> pagina ASPX

MasterPage:

<asp:ContentPlaceHolder ID="MasterPageContentPlaceHolder" runat="server">
</asp:ContentPlaceHolder>

SubMasterPage:

<asp:Content ID="ModuleMainContent" ContentPlaceHolderID="MasterPageContentPlaceHolder" runat="server">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>

aspx.cs:

ContentPlaceHolder MainContent = (ContentPlaceHolder)this.Master.Master.FindControl("MasterPageContentPlaceHolder").FindControl("MainContent");
    TextBox var_type = MainContent.FindControl("air") as TextBox;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top