BasePage
Tweet
ś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ć:
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:
Na tym etapie znajomości wykonywania poleceń, kod naszej klasy BasePage można zmodyfikować następująco:
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:
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.
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ć:
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:
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.


Twitter