---
title: "Ladda UserControl ifrån ascx"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/87135-ladda-usercontrol-ifrån-ascx"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Vide"
published: "2003-09-28T23:26:42.000Z"
updated: "2003-09-29T22:32:03.000Z"
replies: 11
views: 457
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/87135-ladda-usercontrol-ifrån-ascx"
---

# Ladda UserControl ifrån ascx

## #1 — Vide, 2003-09-28T23:26Z

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):

```
protected System.Web.UI.WebControls.PlaceHolder module;
```

Permalänk: https://www.webforum.nu/p/87135

## #2 — Vide, 2003-09-29T17:19Z

Jag kanske förklarade lite dåligt, här kommer en mer detaljerad beskrivning av mitt problem:

I default.aspx har jag en PlaceHolder med ID="module":

```
<asp:PlaceHolder ID="module" Runat="server" />
```

I CodeBehind refererar jag till kontrollen såhär:

```
protected System.Web.UI.WebControls.PlaceHolder module;
```

... och ändrar dess innehåll såhär:

```
module.Controls.Add(Page.LoadControl( "sidan.ascx" ));
```

Nu till problemet, jag vill i denna sidan få access till min PlaceHolder "module", hur skriver jag referensen i sidan.ascx?

Detta fungerar ju inte eftersom det inte ligger på samma sida:

```
protected System.Web.UI.WebControls.PlaceHolder module;
```

Någon som har någon idé om hur man kan lösa detta?

Permalänk: https://www.webforum.nu/p/1171414

## #3 — niko, 2003-09-29T17:36Z

Nu kan jag inte ASP.NET så bra, så med viss risk för att göra bort mig:

```
this.Parent.FindControl(" ..
```

Eller nåt liknande?

Permalänk: https://www.webforum.nu/p/1171426

## #4 — Josef, 2003-09-29T20:32Z

```
(([i]<klass>[/i])Page).FindControl("[i]<kontroll>[/i]");
```

Tror jag. ;)

Permalänk: https://www.webforum.nu/p/1171614

## #5 — Vide, 2003-09-29T21:02Z

Tack för svaren, nu börjar jag komma närmare, men jag har fortfarande problem, med denna kod får jag felmeddelandet:

> **ASP.NET skrev:**
>
> 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.

```
	  protected [url][i]mynamespace[/i]._default[/url] _default;
	  protected System.Web.UI.WebControls.Label testlabel;

		private void Page_Load(object sender, System.EventArgs e)
		{
			testlabel.Text = _default.FindControl( "module" ).ToString();
		}
```

Den pekar på raden där jag försöker att accessa "module", den verkar alltså inte hitta kontrollen.

Permalänk: https://www.webforum.nu/p/1171638

## #6 — Engine^, 2003-09-29T21:38Z

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å.

default.aspx

```
<%@ Page Src="default.aspx.cs" Inherits="cPage" %>

<body>
  <asp:PlaceHolder id="phID" runat="server/>
</body>
```

default.aspx.cs

```
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... :)

Permalänk: https://www.webforum.nu/p/1171665

## #7 — Vide, 2003-09-29T21:48Z

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. ;)

Permalänk: https://www.webforum.nu/p/1171672

## #8 — Engine^, 2003-09-29T21:51Z

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...

Permalänk: https://www.webforum.nu/p/1171675

## #9 — Vide, 2003-09-29T21:55Z

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.

Permalänk: https://www.webforum.nu/p/1171678

## #10 — Engine^, 2003-09-29T22:00Z

Ok... jag tror jag missuppfattade en mening :)

> **Vide skrev:**
>
> 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.

Den är en aning diffus ;)

Permalänk: https://www.webforum.nu/p/1171681

## #11 — Vide, 2003-09-29T22:03Z

Håller med :e

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.

Permalänk: https://www.webforum.nu/p/1171682

## #12 — Engine^, 2003-09-29T22:32Z

Ok... då är jag rädd för att du kommer till att sluta ungefär här

**Exception Details:** System.Web.HttpException: A control cannot modify its parents' control collections.

om du vill "byta ut".

Annars så kan du referera till din placeholder med

```
[u]usercontrol.aspx.cs[/u]
public class cTjohoo : System.Web.UI.UserControl
{
  private PlaceHolder objPH;

  public void Page_Load(object objSrc, EventArgs e)
  {
    objPH = (PlaceHolder) this.Page.FindControl("[i]yourplaceholdergoeshere...[/i]"))
  }
}
```

Permalänk: https://www.webforum.nu/p/1171693

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/87135-ladda-usercontrol-ifrån-ascx
