webForumDet fria alternativet

Skapa en page-instans med dess kontroller?

.NET

3 svar · 369 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Hur skapar man en ny instans av System.Web.UI.Page? Jag har lyckats med att skapa en instansen men den nya instansen innehåller inga webkontroller. Jag misstänker att det beror på att jag måste anropa något ytterligare efter instanseringen. Någon som vet?

Här är ett enkelt kodexempel på vad jag vill åstadkomma:

Type pageType = Page.GetType();
Page newPage = (Page)pageType.GetConstructor(new Type[0]).Invoke(new object[0]);

if (Page.Controls.Count != newPage.Controls.Count)
{
    throw new Exception("Not equal controls");
}
Medlem sedan maj 20011 312 inlägg
#2

Jag känner att detta är lite utanför mitt kunskapsområde :) Men det senaste jag testat är följande:

PageBase newPage = (PageBase)pageType.GetConstructor(new Type[0]).Invoke(new object[0]);
newPage.CustomInitialize();

if (Page.Controls.Count != newPage.Controls.Count)
{
    throw new Exception("Not equal controls");
}

-------------------
public void CustomInitialize()
{
    System.EventArgs e = new EventArgs();
    base.FrameworkInitialize();
    base.InitializeCulture();
    base.OnPreInit(e);
    base.OnInit(e);
    base.OnInitComplete(e);
    base.OnPreLoad(e);
    base.OnLoad(e);
    base.OnLoadComplete(e);
    base.CreateChildControls();
    base.OnPreRender(e);
    base.OnPreRenderComplete(e);
    base.SaveViewState();
    base.OnSaveStateComplete(e);
    base.Render(new System.Web.UI.HtmlTextWriter(new System.IO.StringWriter()));
}

Men det finns fortfarande inga kontroller i den nya page-klassen.

Medlem sedan dec. 19996 522 inlägg
#3

Vad vill du åstakomma genom att kopiera en instans av en Page?

Medlem sedan maj 20011 312 inlägg
#4

Jag har experimenterat lite med att skapa en simpel GUI-entitets-mapper och jag vill i efterhand kunna validera automatisk alla mappningar man gjort på olika sidor och detta via automatiska tester. Din fråga är dock bra...

Något som jag tänkt på är att skapa någon form av automatgenerat kontrakt (inte interface) till sidorna för att underlätta validering men också för att snabba upp mappningen. Men för att jag ska kunna validera att en sida följer ett kontrakt så måste jag komma åt dess kontroller. Detta skulle jag vilja göra genom att skapa en page-instans. Detta borde vara möjligt men jag är som sagt osäker på hur man gör det...

Eller har du något annat bra alternativ hur man skulle kunna göra?

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)