Basisklassen für Web Forms erstellen
Manchmal ist es sinnvoll, Funktionen die in jeder ASPX Seite vorkommen müssen, (z. B: die Überprüfung, ob ein User eingeloggt ist oder nicht) in einer separaten Basisklasse (1) auszulagern.
Um eine Basisklasse für Webforms zu erstellen muss diese von System.Web.UI.Page (2) erben. Man legt also unter App_Code eine neue cs-Datei („BasePage.cs“) an und erstellt in dieser eine neue abstrakte Klasse (3):
namespace GO.Web
{
/// <summary>
/// Abstrakte Basisklasse für alle aspx-Seiten
/// </summary>
public abstract class BasePage : System.Web.UI.Page
{
}
}
Die vorhandenen Webforms können jetzt von dieser Klasse erben:
namespace GO.Web
{
public partial class _Default : GO.Web.BasePage
{
}
}
Statt „System.Web.UI.Page“ steht hier jetzt „GO.Web.BasePage“.
Jetzt können alle Aufgaben die jede Page ausführen muss in diese Basisklasse ausgelagert werden, z. B: das auslesen der Benutzer ID aus der Session und das umleiten zur Login.aspx wenn keine ID vorhanden ist:
namespace GO.Web
{
/// <summary>
/// Abstrakte Basisklasse für alle aspx-Seiten
/// </summary>
public abstract class BasePage : System.Web.UI.Page
{
private int userId = -1;
public int UserId
{
get
{
if (userId = -1)
{
object o = Session["userid"];
if (o != null)
userId = int.Parse(o.ToString());
else
userId = -1;
}
return userId;
}
set { Session["userid"] = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
if (UserId == -1)
{
Response.Redirect("Login.aspx", true);
}
}
}
}
Damit es auf der Login.aspx nicht zu einer Endlosschleife kommt, muss hier die Page_Init überschrieben werden:
namespace GO.Web
{
public partial class Login : GO.Web.BasePage
{
Protected override void Page_Init(object sender, EventArgs e)
{
// do nothing
}
}
}
Oder die Login.aspx darf nicht von der Basisklasse erben.
Übrigens:
Eine andere Methode wie man ein Web vor unerlaubten Zugriff schützt, hat Kay in seinem neuesten Beitrag beschrieben.
(1) http://de.wikipedia.org/wiki/Basisklasse
(2) http://msdn2.microsoft.com/de-de/library/system.web.ui.page(VS.80).aspx
(3) http://de.wikipedia.org/wiki/Abstrakte_Klasse