BasePage

Mechanizm dziedziczenia jest ogólnie znany oraz chętnie wykorzystywany w programowaniu obiektowym. Nie wiedzieć czemu w aplikacjach internetowych stosuje się go raczej rzadko. W tym artykule chciałbym zaprezentować jak wykorzystać dziedziczenie w sprytny sposób w aplikacji webowej.

Rozpoczynamy tworząc pustą solucję w VS z aplikacją internetową. Do projektu webowego dodajemy jedną stronę aspx oraz klasę o nazwie BasePage. Klasa ta dziedziczyć będzie po System.Web.UI.Page, czyli po standardowej stronie Web Form. Przechodzimy do wnętrza klasy BaseBage i zaczynamy pisać override, następnie ’Spacja’ i ukazuje się nam lista elementów, które możemy nadpisać/przeładować:

IntelliSense

Wybieramy opcję podświetloną na powyższym zrzucie ekranu – OnLoad. W ciele metody, która została utworzona dopisujemy na przykład poniższy kawałek kodu:

protected override void OnLoad(EventArgs e)
{
    Response.Write("BasePage - before right page<br />");

    base.OnLoad(e);

    Response.Write("BasePage - after right page<br />");
}

Następnie wracamy do przykładowej strony, do pliku .cs, a w nim do deklaracji klasy strony i zmieniamy jej dziedziczenie z Page na BasePage. W zdarzeniu Page_Load również dopisujemy Response.Write(“Hello world”). W tym momencie warto uruchomić aplikację i zobaczyć jak skorelowane jest działanie logiki, którą właśnie utworzyliśmy. Zauważyć można, iż w pierwszej kolejności ukazał się napis zawierający “before right page”, następnie napis “Hello world” z przykładowej strony, kończąc napisem z zawartością “after right page”. Zadanie to miało na celu uświadomić w jakiej kolejności wykonywane są instrukcje w powiązanych plikach.

Na tym etapie znajomości wykonywania poleceń, kod naszej klasy BasePage można zmodyfikować następująco:

public class BasePage : System.Web.UI.Page
{
    const string APPLICATION_NAME = "BasePage test application"; 

    protected override void OnLoad(EventArgs e)
    {
        this.Title = string.Format("{0} - {1}", APPLICATION_NAME, this.Title);
        base.OnLoad(e);
    } 
}

Przykładową stronę modyfikujemy nadając jej tytuł w pliku .aspx. Uruchamiając teraz aplikację dostrzec można, iż strona nosi tytuł “BasePage test application – First page”.

Inną możliwością, jaką możemy obdarzyć naszą klasę to właściwość (properties), deklarując ją przykładowo w poniższy sposób:

protected int? Id
{
    get { return (int?)ViewState["_Id"]; }
    set { ViewState["_Id"] = value; }
}

Odwołać się do niej można poprzez słowo kluczowe this. Identyczne działanie wykorzystać można w przypadku metod. Przykładowo w BasePage:

protected void RegisterJsVar(string varName, string varValue)
{
    System.Web.UI.ScriptManager.RegisterStartupScript(
        this, 
        GetType(), 
        "Vars", 
        string.Format("var {0} = '{1}'; {2}", varName, varValue.Replace("'", "\'"), Environment.NewLine), 
        true
        );
} 

wykorzystanie w Page_Load:

public partial class Default : BasePage
{
    const string JS_VAR_NAME = "jsVarName";

    protected void Page_Load(object sender, EventArgs e)
    {
        this.RegisterJsVar(JS_VAR_NAME, "jsValue");
    } 
}

na koniec widoczne rezultaty w kodzie HTML:

HTML

Powyższe przykłady to tylko trywialne możliwości zastosowania kalsy BasePage. Taka klasa doskonale sprawdza się również w sytuacjach, kiedy aplikacja internetowa nie posiada strony wzorcowej (MasterPage). Potrafi wtedy niesamowicie ułatwić życie programiście.

Promuj

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *