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

What do you think?
Like Love Haha Wow Sad Angry

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *