Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

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

Posted: Mittwoch, 8. August 2007 11:00 von Jürgen Gutsch
Abgelegt unter: , ,

Kommentare

Peter Bucher sagte:

Masterpages sind eine wirklich tolle Neuerung von ASP.NET 2.0. Um so mehr entfaltet sich die Wirkung,

# September 30, 2007 23:29

Jürgen Gutsch sagte:

Ich möchte heute mal eine einfache Authentifizierung mit ASP.NET vorstellen, welche ohne die herkömmlichen

# Juli 8, 2008 11:46

Jürgen Gutsch sagte:

Wieder ein Thema aus den Foren. Sowohl auf den ASP.NET Zone Foren als auch im Web-Technologie Forum auf

# März 10, 2009 16:59
Anonyme Kommentare sind nicht zugelassen