Loading...

Łukasz Kurzyniec

Portfolio

BasePage

Ilość komentarzy 0
środa, 4 maj 2011
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:
#region event
protected override void OnLoad(EventArgs e)
{
    Response.Write("BasePage - before right page
"); base.OnLoad(e); Response.Write("BasePage - after right page
"); } #endregion
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
{
    #region const
    const string APPLICATION_NAME = "BasePage test application"; 
    #endregion

    #region event
    protected override void OnLoad(EventArgs e)
    {
        this.Title = string.Format("{0} - {1}", APPLICATION_NAME, this.Title);
        base.OnLoad(e);
    } 
    #endregion
}
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:
#region property
protected int? Id
{
    get { return (int?)ViewState["_Id"]; }
    set { ViewState["_Id"] = value; }
}
#endregion
Odwołać się do niej można poprzez słówko kluczowe this. Identyczne działanie wykorzystać można w przypadku metod. Przykładowo w BasePage:
#region protected
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
        );
} 
#endregion
wykorzystanie w Page_Load:
public partial class Default : BasePage
{
    #region const
    const string JS_VAR_NAME = "jsVarName";
    #endregion

    #region event
    protected void Page_Load(object sender, EventArgs e)
    {
        this.RegisterJsVar(JS_VAR_NAME, "jsValue");
    } 
    #endregion
}
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


Komentarze { v0.4 }

Brak komentarzy