Forums Neueste Beiträge
 

Control in verschachtelter Masterpage finden

21/05/2009 - 20:01 von Thomas Elser | Report spam
Hallo,

ich habe in einem Projekt eine Main.master, sowie eine Kontakt.master.

Die Kontakt.master hat die main.master als Masterpage:

<%@ Master Language="VB" MasterPageFile="~/Main.master"
AutoEventWireup="false" CodeFile="Kontakt.master.vb"
Inherits="Kontakt_Kontakt" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<asp:ContentPlaceHolder ID="ContentPlaceHoldehead_Kontakt_Head"
runat="server">
</asp:ContentPlaceHolder>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder_Links"
Runat="Server">
<asp:ContentPlaceHolder ID="ContentPlaceHolder_Kontakt_Links"
runat="server">
<ul>
<li><asp:HyperLink ID="hyp_Kontakt" runat="server"
NavigateUrl="~/Kontakt/Kontakt.aspx">Kontakt</asp:HyperLink></li>
</ul>
</asp:ContentPlaceHolder>
</asp:Content>

Ich möchte nun in einer Webform "Kontakt.aspx" auf den Hyperlink mit der ID
"hyp_Kontakt" zugreifen:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Dim Content As ContentPlaceHolder =
CType(Page.Master.FindControl("ContentPlaceHolder_Kontakt_Links"),
ContentPlaceHolder)
Dim hypKontakt As HyperLink =
CType(Content.FindControl("hyp_Kontakt"), HyperLink)
End Sub

Das funktioniert leider nicht:

"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Zeile 8: Dim Content As ContentPlaceHolder =
CType(Page.Master.FindControl("ContentPlaceHolder_Kontakt_Links"),
ContentPlaceHolder)
(Fehler in dieser Zeile) Zeile 9: Dim hypKontakt As HyperLink =
CType(Content.FindControl("hyp_Kontakt"), HyperLink)"

Ich denke mir mal der Fehler liegt daran, das der Contentplaceholder auf der
Kontakt.master wieder innerhalb eines Contentbereiches der Main.master
liegt.

Wie muss ich das angehen damit ich auf das Hyperlink Control zugreifen kann?

Vielen Dank vorab für Eure Hilfe

Liebe Grüße

Thomas
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
21/05/2009 - 20:29 | Warnen spam
Hallo Thomas,

"Thomas Elser" schrieb:

Ich möchte nun in einer Webform "Kontakt.aspx" auf den Hyperlink mit der ID "hyp_Kontakt" zugreifen:



in den allermeisten Fàllen ist das weder notwendig noch sinnvoll. Daher
die Frage: Warum musst Du aus der MasterPage heraus auf den Link in der
Webform zugreifen und kannst das nicht direkt in der Webform machen?

Ich denke mir mal der Fehler liegt daran, das der Contentplaceholder auf der Kontakt.master wieder innerhalb eines
Contentbereiches der Main.master liegt.



FindControl findet nur Controls im angegebenen Control. Du musst rekursiv
durch alle Controls und deren untergeordnete Controls laufen, damit das
funktioniert.

Wenn Du die Pfade kennst, geht auch sowas:

<Control>.FindControl( "<Ebene1>" ).FindControl( "<Ebene2>" ).FindControl( "<Ebene3>" )...

Aber dass man davon abraten sollte, siehst du hoffentlich selbst :)

Wie muss ich das angehen damit ich auf das Hyperlink Control zugreifen kann?



http://www.aspnetzone.de/blogs/pete...ungen.aspx

wàre hier eine besser Variante wobei man berücksichtigen muss, dass hiermit
nur das erste Vorkommen eines beliebigen Controls mit der angegebenen ID
ermittelt wird.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen