15 października 2007, 15:23 dario Komentarze (0)

Jak dynamicznie załadować stronę ASPX z poza katalogu aplikacji

Kilka dni temu trafiłem na ciekawy przykład kodu, który pozwala na powołanie "obiektu strony" na podstawie wirtualnej ścieżki do pliku ASPX. Kawałek przykładowego kodu opublikował na swojej stronie Michael Palermo. Podstawą działania jest klasa BuildManager i metoda GetCompiledType, która jako parametr wejściowy przyjmuje ścieżkę wirtualną do pliku, a zwraca typ obiektu skojarzonego z plikiem ASPX. Dalej wystarczy powołać instancję danego typu stosując metodę CreateInstance klasy Activator i mamy już w rękach obiekt.

W komentarzach znalazłem pytanie jak powołać obiekt strony ASPX, który znajduje się poza katalogiem aplikacji, czyli nie znajduje się w określonej ścieżce wirtualnej. Michael chwalił się, że napisze o tym w przyszłości, więc nie czekając postanowiłem poszukać samemu i znalazłem. :) Z pomocą przychodzi metoda statyczna GetCompiledPageInstance klasy System.Web.UI.PageParser.

Przyjmuje ona trzy parametry:

  • ścieżkę wirtualną do pliku;
  • ścieżkę absolutną do pliku;
  • bieżący kontekst.

Jako ścieżkę absolutną podajemy lokalizację do pliku ASPX, który może się znajdować w dowolnym miejscu na dysku. Jako kontekst oczywiście bieżący kontekst, przykładowo HttpContext.Current. A teraz mały tip. Jako ścieżkę wirtualną podajemy dowolną nazwę pliku, na przykład "/test.aspx", który nie musi istnieć w katalogu aplikacji. Wartość tego parametru służy jedynie do nazwania wygenerowanej klasy przez Parser. Dla pliku o nazwie "test.aspx" zostanie utworzona klasa w przestrzeni nazw ASP z nazwą "test_aspx". W wyniku wykonania metody dostajemy instancję obiektu, który implementuje IHttpHandler, czyli każda strona, która dziedziczy po System.Web.UI.Page. Wyrenderowanie strony uzyskamy wywołując na tym obiekcie metodę ProcessRequest.

Może to komuś się przyda. Mi przydało się bardzo, ale o tym innym razem ;)

Tagi:

.Net

Komentarze zablokowane

O autorze

Dariusz Gil - projektant i programista aplikacji internetowych budowanych na platformie Microsoft w technologii ASP.NET (C#) oraz MS SQL Server. Obecnie właściciel (narazie :)) jednoosobowej firmy Softio.

Filtruj używając APML