Da bin ich wohl auf einen schwerwiegenden Bug in ASP.NET 2.0 gestoßen. Und zwar ist es unmöglich via LodControl ein Control außerhalb einer CodeBeside-Klasse zu laden. Jeglicher Versuch das in einer eigenen Klasse zu tun, scheitert mit der Fehlermeldung:
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: basepath
Die Ursache laut Raomond Brookman: die Eigenschaft AppRelativeTemplateSourceDirectory wird nicht richtig initialisiert. Sein angebotener Workaround funktionierte nur leider in meinen Testfällen nicht.
Nachdem ich damit fast einen Arbeitstag verbraten habe, habe ich jetzt eine Dirty-Method gewählt: ich übergebe an meine Klasse einfach die Page-Instanz des aufrufenden WebForms mit, und arbeite dann mit dieser. So funktioniert es. Das kann man als Property oder auch als normalen Parameter für eine statische Methode machen:
protected void Page_Load(object sender, EventArgs e)
{
RenderContent content = new RenderContent();
content.ContentPlaceholder = MeinPlaceholderXYZ;
content.Instance = this;
content.Render();
}
Instance ist eine public Property:
private Page instance;
public Page Instance
{
get { return instance; }
set { instance = value; }
}
Mit dieser kann man nun arbeiten, d.h. z.B. LoadControl() ausführen.
Update:
Es ist kein Bug, bzw. keiner mehr. In der June CTP ist er jedenfalls wohl schon behoben. Ist halt doch noch alles etwas beta ;-)