Hej! Tack! Vill minnas att det finns något bättre sätt, men kan inte komma på vad man ska googla efter... =/ för att slippa sökningen som findcontroll , och få en anningen snyggare kod kan du använda properties på masterpagen , som beskrivs i artikeln. Testa det här: Många har get mer eller mindre ett svar på denna fråga, men här kommer ett till ;) Tack för alla svaren! Jag förstår lite hur du tänker, för många vill se MastePage som en basklass som ärvs, men så är det inte. MasterPage är enbart en mall. För att komma åt mallens komponenter så använder vi Master egenskapen. Master returnerar instancen av mallen som används. Men eftersom den returnerar MasterPage som typ, så måste vi göra en casting för att komma åt vårt egna interface. Men vi kan med MasterType se till att Master egenskapen på Page får vår typ vid bygget av sidan. Jag tycker väl personligen att den borde få vår typ med en gång då vi ändå anger en MasterPage. Tycker det är lite onödigt att vi behöver använda MasterType.. men MS har valt att implementera det så, men de lyssnar på feedback.. :)Komma åt komponenter från en undersida till en masterpage?
Jag använder mig av masterpage för att bygga upp min webbplats och nu vill jag komma åt en asp:hyperlink från en av undersidornas code-behind. Hur gör jag?Sv:Komma åt komponenter från en undersida till en masterpage?
Men borde man inte kunna komma åt dem direkt innan kompilering i codebehind?Sv: Komma åt komponenter från en undersida till en masterpage?
Här kan du dock se ett sätt (casta master-propertyn): http://www.codeproject.com/aspnet/InsideMasterPages.asp
/JohanSv:Komma åt komponenter från en undersida till en masterpage?
ska du t.ex. bara ändra text på en label , så kan du ju ha en propertie på masterpagen
Master.MinLabelText = "hej";
skulle då motsvara
((Lable)Master.FindControl("minlabel")).Text = "hej";
själv använder jag property fallet eftersom det blir renare kod, men frågan var ju hur man kom åt controllen :)Sv: Komma åt komponenter från en undersida till en masterpage?
<code>
//Leta upp din contentplaceholder
ContentPlaceHolder myContent = (ContentPlaceHolder)Master.FindControl("controlname");
//Leta upp den specifika kontrollen
HyperLink myHyperlink = (HyperLink)myContent .FindControl("controlname ");
</code>Sv: Komma åt komponenter från en undersida till en masterpage?
Du kan som det redan nämns köra med FindControl, tänk bara på att FindControl tittar på en kontrollnivå, den söker inte rekursivt ner kontrollstrukturen.
Ett annat sätt som jag tycker är mer elegant är att exponera ut kontrollen från MasterPage via en property. Genom att exponera ut den som en property så kan du tex bara skriva "return myHyperLink". Du behöver inte leta upp den, utan bara returnera instansen. För att sedan komma åt den via din content page, så använder du dig av Page objektets Master property. Men eftersom Master propertyn returnerar typen MasterPage så måste du göra en casting för så du kommer åt ditt interface (i detta fallet din property). Detta kan du göra på 2 olika sätt. Med casting eller med @MasterType. Du kan läsa mer om det på min blog:
http://fredrik.nsquared2.com/ViewPost.aspx?PostId=123
/Fredrik Normén
ASP.Net MVP - CornerstoneSv:Komma åt komponenter från en undersida till en masterpage?
Men jag måste ändå säga att jag är förvånad över att det inte finnas en mer självklar lösning. Jag har ganska begränsade kunskaper i objektorienterad programmering men eftersom man refererar till mastersidan i contentsidan, borde man inte kunna ärva ner de publika kontrollerna..? I alla fall tycker jag att det skulle vara den snyggaste lösningen. Men sen att masterpage inte är byggt på det sättet är väl en annan sak :)Sv: Komma åt komponenter från en undersida till en masterpage?
http://connect.microsoft.com/Main/content/content.aspx?ContentID=2220 <- Här kan du skicka in dina feedback.
Ha en underbar helg!
/Fredrik Normén
ASP.Net MVP - Cornerstone
blog: http://fredrik.nsquared2.com