Alltså det här är säkert riktigt simpelt, men jag hittar inget när jag söker på google... hittar mest en massa artiklar som man måste betala för att få läsa hela...
Jo, jag har en sida, showpage.aspx. Den innehåller själva sidlayouten med sidhuvud, meny och sidfot.
Sen vill jag då ladda in olika sidor "inuti" denna sida, beroende på vilken sida (bestäms av en GET-parameter) som skall visas. Använder mig av en Placeholder för detta ändamål, och laddar in sidorna som UserControls med LoadControl().
select case Request.QueryString("page")
case "showquestion"
ctlPageCtrl = LoadControl("showquestion.ascx")
case "showresults"
ctlPageCtrl = LoadControl("showresults.ascx")
case "addquestion"
ctlPageCtrl = LoadControl("addquestion.ascx")
case else
ctlPageCtrl = LoadControl("startpage.ascx")
end select
plhPageCtrl.Controls.Add( ctlPageCtrl )
Men om jag vill kunna komunicera med ctlPageCtrl (anropa funktioner, ändra attribut, etc) så måste ju deras klasser finnas tillgängliga för showpage.aspx. Hur gör jag detta??? För som det är nu så vet ju showpage.aspx ingenting om usercontrol'en som laddas in, och därför kan jag ju inte kommunicera med den...
Om nån fattar vad jag menar, så skriv gärna ett enkelt kodexempel.
Ett bra sätt att kolla vilka klasser, propertys och values som är tillgängliga är att du debuggar koden. Sätt en breakpoint ungefär där du skulle vilja anropa dessa klasser. Tryck på Play ikonen. När sidan haltas vid idn breakpoint så leta upp ett fönster som heter Locals. Där ser du, i en trädstruktur, allt som du kommer åt och vilka värden de har vid just detta tillfälle.
Själv kör jag alltid med ett stort Local fönster när jag debuggar så blir det lättare att se vad som händer. Response.write debuggningens tid är förbi! =)
Nej det är inte alls så jag menar. Jag menar att jag ju inte kan komma åt medlemsfunktioner och annat i mina usercontrols... Alltså om vi tar ett litet exempel, så kanske du kan förklara hur det ska se ut:
test.aspx
<%@ Page Language="VB" Debug="True" %>
<script runat="server">
dim public str as string
Sub Page_Load(sender As Object, e As EventArgs)
dim ctrl1 as Control
ctrl1 = LoadControl("testcontrol.ascx")
ctrl1.str = "Foo"
PlaceHolder1.Controls.Add( ctrl1 )
Response.Write( str )
End Sub
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>
</form>
</body>
</html>
testcontrol.ascx
<%@ Control Language="VB" Debug="True" %>
<script runat="server">
public class testcontrol
inherits System.Web.UI.UserControl
dim public str as string
private Sub Page_Load(sender As Object, e As EventArgs)
Response.Write( str )
Page.str = "Bar"
End Sub
end class
</script>
Vad jag vill att ovanstående kod ska göra är att skriva ut "FooBar".
Men det funkar ju inte för att test.aspx vet inte att ctrl1 är av klassen testcontrol, och den vet ju inte hur klassen ser ut heller... Och testcontrol vet ju inte heller att sidan har en variablel som heter str....
Går det ens att göra det som jag vill åstadkomma???