Frage

Ich möchte eine Art eines „Basepage“ Objekt erhalten, das ich die Schaffung bin. Jedes Page-Objekt basiert weg Basepage. Zum Beispiel habe ich eine Login.aspx und in meinem Code-Behind und eine Klasse, die eine Methode Display hat:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(page.GetType());
}

In meiner Projektstruktur habe ich eine Standard-Ressource-Datei und eine Pseudo-Übersetzung Ressourcendatei. Wenn ich gesetzt etwas wie dies versuchen:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(typeof(Login));
}

es gibt die übersetzte Seite. Nach einigen Recherchen fand ich, dass page.GetType (). ToString () etwas in der Art von „ASP_login.aspx“ zurück Wie kann ich den eigentlichen Code hinter Klassentyp zu bekommen, so dass ich ein Objekt vom Typ „Login“ erhalten, das ist abgeleitet von „Basepage“?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Wenn Ihr Code-beside sieht wie folgt aus:

public partial class _Login : BasePage 
 { /* ... */ 
 }

Dann würden Sie das Type Objekt dafür bekommen mit typeof(_Login) . Um den Typ dynamisch zu erhalten, können Sie es rekursiv finden:

Type GetCodeBehindType()
 { return getCodeBehindTypeRecursive(this.GetType());
 }

Type getCodeBehindTypeRecursive(Type t)
 { var baseType = t.BaseType;
   if (baseType == typeof(BasePage)) return t;
   else return getCodeBehindTypeRecursive(baseType);
 }

Andere Tipps

Nach einigen weiteren Studien fand ich, dass, wenn ich Page.GetType () aufrufen. Basetype es den Code-behind gibt Typ der Aspx-Seite.

page.GetType (). Basetype hat es schon gesagt, aber lassen Sie mich erarbeiten, warum.

Aspx Seiten erben von ihrem Code-Behind-Seiten, was bedeutet, dass die Vererbungshierarchie wie folgt aussieht:

...
Page
BasePage
Login
ASP_Login

Wenn die Spitze ist der Eltern- und der Boden ist das Kind.

Auf diese Weise kann hinter dem Code zugänglich von der aspx Seite sein, ohne zu Ihrer eigentlichen aspx Seite verbunden sind alle generierten Code erfordern in die Basisklasse Seite kopiert werden.

Es hängt davon ab, wo Sie anrufen Display () aus. Wenn Sie es aus der ASPX anrufen, dann you'llse „ASP_login.aspx“. Wenn Sie es aus dem Code-behind (das heißt der Page_Load () -Methode) sind aufrufen sollten Sie die Login-Seite-Typ erhalten.

Statt die Seite in der Weitergabe, sollten Sie überlegen, nur die Seite Eigenschaft verwenden (das heißt this.Page.GetType ()), die sollte immer die aktuelle Seite / Code-Behind-Typ sein, wenn ich mich richtig erinnere.

Ich möchte auch darauf hinweisen, dass Sie sich anschauen sollten diese Art von Sachen aus dem ASPX / Code-Behind und in eine Art von Service zu bewegen. Es ist generell eine gute Idee, um die Menge von Dingen, die Sie tun, in einem Code hinter und stattdessen Push-Logik in einen Moderator Klasse und folgt dem MVP-Muster für ASP.NET Web Forms Entwicklung zu minimieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top