Hur laddar jag in en UserControl ifrån en UserControl?
Alltså:
Jag har default.aspx som har en PlaceHolder i sig, där laddar jag inte olika UserControls, nu vill jag ifrån en sådan UserControl ladda en annan.
Måste jag på något speciellt sätt skapa en referens till denna PlaceHolder på något annat sätt än när man står på själva sidan som innehåller den?
Nu refererar jag till den såhär (även i en UserControl):
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Tja... jag gör så här - för att svara lite på din första fråga. Inte för att vi verkar göra på samma sätt, men här är ett sätt (har inte hunnit byta metod än ;)) att göra det hela på.
using System;
using System.Web.UI.WebControls;
public class cPage : Page
{
protected PlaceHolder phID;
public void Page_Load(object objSrc, EventArgs e)
{
phID.Controls.Add(Page.LoadControl("usercontrol.ascx"));
}
}
usercontrol.ascx
<%@ Control Src="usercontrol.ascx.cs" Inherits="cPage" %>
<asp:UserControl id="objPH" runat="server"/>
usercontrol.ascx.cs
using System;
using System.Web.UI.WebControls;
public class cPage : System.Web.UI.UserControl
{
protected PlaceHolder objPH;
public void Page_Load(object objSrc, EventArgs e)
{
objPH.Controls.Add(Page.LoadControl("somecontrol.ascx"));
}
}
Hur du sedan accessar kontrollerna är upp till dig ;) men i stort så är det "bara" att stoppa in dina kontroller som protected-variabler i klassen - ungefär som min protected PlaceHolder objPH;
Förövrigt funderar jag på om jag höll tungan rätt i munnen nu... :)
Så skulle man kunna göra, men då tappar man funktionaliteten att sköta inladdningar ifrån default.aspx, att en sånhär operation skall skötas i flera steg känns helt enkelt fel.
Men jag tror jag är inne på rätt spår som jag skriver ovan, det är bara det lilla att den inte hitta objektet. ;)
Jag sköter inladdningarna från default.aspx.cs och har några placeholders i default.aspx. Resten är codebehind och usercontrols, som det ser ut nu och det var så jag uppfattade att du hade det. Men det kanske har ändrat sig en del sedan första inlägget... :) Iofs bestod mitt svar i att nästla usercontrols...
Du laddade ju UserControls ifrån UserControls, det var precis det jag ville bort ifrån. ;)
Det enda jag vill är att få en referens till default-klassens kontroller för att kunna ladda in kontroller direkt ifrån toppen, utan att behöva nästla eller gå via annan funktionalitet.
Default.aspx innehåller en PlaceHolder.
Denna PlaceHolder laddar in olika UserControls.
Ifrån en sådan UserControl vill jag "byta ut" den inladdade UserControlen mot en annan.