ASP.Net și GetType ()

Vreau să obțin un tip de obiect "BasePage" pe care îl creez. Fiecare obiect Pagină se bazează pe BasePage. De exemplu, am un Login.aspx și în codul din spate și o clasă care are o metodă Afișare:

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

În structura proiectului meu am un fișier de resurse implicit și un fișier de resurse psuedo-translation. Dacă aș seta încercați ceva de genul acesta:

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

se întoarce pagina tradusă. După unele cercetări am descoperit că pagina.GetType (). ToString() a returnat ceva în efectul "ASP_login.aspx" Cum pot obține codul actual în spatele tipului de clasă, astfel încât să obțin un obiect de tip "Login", care este derivate din "BasePage"?

Mulțumesc anticipat!

6

4 răspunsuri

Dacă codul dvs. alăturat arată astfel:

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

Apoi, veți obține obiectul Type pentru el cu typeof (_Login) . Pentru a obține dinamic tipul, îl puteți găsi recursiv:

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

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

După unele cercetări suplimentare, am constatat că dacă apel la Page.GetType() BaseType returnează codul din spatele tipului paginii Aspx.

3
adăugat

page.GetType() .BaseType, a fost spus mai înainte, dar permiteți-mi să-mi explic de ce.

Aspx paginile moștenesc de la paginile lor cod-spate, ceea ce înseamnă că ierarhia de moștenire arată astfel:

...
Page
BasePage
Login
ASP_Login

În cazul în care partea de sus este părinte și partea de jos este copilul.

Acest lucru vă permite ca codul dvs. din spate să fie accesibil din pagina aspx, fără a solicita copierea întregului cod generat în legătură cu pagina dvs. aspx efectivă în pagina de clasă de bază.

1
adăugat

Depinde de unde apelezi Display() de la. Dacă o apelați din ASPX, atunci veți găsi "ASP_login.aspx". Dacă o apelați din codul din spate (adică metoda Page_Load (), trebuie să obțineți tipul de pagină de conectare.

În loc să treci pagina înăuntru, puteți lua în considerare doar utilizarea proprietății paginii (adică this.Page.GetType ()) care ar trebui să fie întotdeauna tipul actual de pagină/cod, dacă îmi amintesc corect.

De asemenea, ar trebui să subliniez că ați putea să vă gândiți să mutați astfel de lucruri din ASPX/codebehind și într-un fel de serviciu. În general, este o idee bună să minimizați cantitatea de lucruri pe care o faci într-un cod în spate și, în schimb, să împingeți logica într-o clasă de prezentatori și să urmați modelul MVP pentru dezvoltarea formelor web ASP.NET.

0
adăugat