Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Eventbehandlung bei ASP.NET WebForms

Geschrieben von: Christian Holm
Kategorie: ASP.NET

In diesem Artikel erlernen Sie das Grundrüstzeug zur Eventbehandlung in ASP.NET. Beginnend mit dem einfachsten Fall des Page_Load Events einer ASP.NET Seite, über die sehr nützliche Page.IsPostBack Property (Eigenschaft), bis zur Triggerung von Events bei ASP.NET WebForms. ASP.NET bietet hierfür eine Vielzahl von Möglichkeiten, die wichtigsten werden wir heute in diesem Artikel besprechen.

Wie immer bei ASP.NET Artikeln ist die Voraussetzung um den Sourcecode dieses Artikels verwenden zu können eine Installation des Microsoft .NET Framework SDK's auf einem Webserver. Weiters ist es von Vorteil, daß der Leser schon Grundkenntnisse bzw. Erfahrung in Programmiertechniken besitzt - es finden sich etliche Artikel auf diesem Server, um das notwendige Wissen von Grund auf zu erlernen.

Weiters verwendet dieser Artikel bereits ASP.NET Web Form Controls (TextBox, RadioButtonList, etc.). Für den Fall, daß Sie noch nicht sattelfest auf diesem Gebiet sind, bietet der Artikel Einführung in ASP.NET Web Forms das nötige Grundwissen hierfür.

Beachte: Für den Fall, daß Sie die Beispiele in einem anderen Web-Verzeichnis als dem standardmäßigen ("C:\Inetpub") ablaufen lassen wollen, müssen Sie das Unterverzeichnis _aspx (zu finden in "C:\Inetpub\wwwroot\") samt Inhalt in das Verzeichnis Ihrer Wahl kopieren. Andernfalls werden Sie womöglich mit frustrierenden Fehlermeldungen bombardiert, da die Artikelbeispiele u. a. Web Controls verwenden.

Der Event

Event schön und gut - aber was ist das und wozu? Grundsätzlich hat das hier gebrauchte englische Wort u.a. für Ereignis nichts mit einem Clubbing-Date zu tun. Dennoch tut sich hier etwas. Dieses "etwas" müssen Sie als Programmierer definieren, damit der Client auf einer Web-Seite interagieren kann. Sie setzen also zunächst die Auslöser (z.B eine ASP.NET Web Form Control) und geben in den Attributen der Control vor, was dann tatsächlich geschieht. Als triviales Beispiel sei hier der Button-Klick des Clients angeführt; nach dem Anklicken des Buttons wird ein Event getriggert, der im einfachsten Fall einen PostBack auf den Webserver durchführt. Dies ist eines der Themen in diesem Artikel.

Da dies womöglich für Sie nicht mehr Neuland ist, wenn Sie bereits unter ASP VBScript oder ähnliches programmiert haben, schreiten wir nun in medias res.

Der Page_Load Event

Die Anweisungen innerhalb dieser Eventroutine werden bei jedem Seitenaufruf, bzw. PostBack ausgeführt. Er ist quasi der erste Event der getriggert wird bevor alle anderen Events, die außerhalb dieser Routine stehen, ausgeführt werden. Sie können hier z.B. Evaluierungs-Scripts einbauen, Variablen definieren oder eine Datenbankverbindung instanzieren.

Damit wären wir wieder bei einem Knackpunkt in Sachen Performance. Datenbankverbindungen sind ja bekanntlich Resourcenfresser - und bei jedem Refresh oder Postback die Verbindung neu instanzieren - wenn dies 1000 User auf Ihrer Website machen, bei einer sehr umfangreichen Datenbank, wird Ihr Webserver bald in die Knie gehen. Natürlich gibt es für solche Events eine Abhilfe namens Page.IsPostBack die dies verhindert - aber dazu später mehr.

Das nun folgende Beispiel soll hier nur mal zum darüber streuen dienen. Beim Aufruf der Seite werden im Browserfenster zwei Meldungen ausgegeben. Die erste benachrichtigt den Client daß das Page Load Event gestartet wurde, und die zweite teilt ihm mit wann und um wieviel Uhr Serverzeit er die Seite zuletzt besucht hat. Klarerweise werden hier zu Demozwecken und der Einfachheit halber nur Meldungen ausgegeben - wie langweilig! Aber ASP.NET Events die einem Web-Programmierer so richtig Spaß bzw. manchmal leider auch Kopfzerbrechen bereiten, werden in anderen AspHeute Artikel besprochen! Um das Beispiel auf Ihrem Webserver auszuprobieren laden Sie im Browser die Datei Load_Event.aspx.

Der prinzpielle Page_Load Event:

...
void Page_Load(Object Src, EventArgs E)
{
  lblLoad.Text="Page Load Events gestartet!";
  lblMsg1.Text = "Letzter Seitenaufruf: " + DateTime.Now;
}
...

Der andere interessante Teil des Sourcecodes enthält die asp:Button Control, welche mit dem onClick Attribut versehen ist.

...
<asp:Button id="btnSubmit" text="Abschicken" onClick="btnSubmit_Click" 
    runat="server" />
...

Wenn der Client also auf den Button klickt, wird ein PostBack durchgeführt und die angegbene Funktion "btnSubmit_Click" ausgeführt.

...
void btnSubmit_Click(Object Sender, EventArgs E)
{
 lblMsg2.Text = "Sie haben den Abschicken-Button zuletzt am " 
    + DateTime.Now + " angeklickt.";
}
...

Diese wiederum gibt Datum und Uhrzeit des Anklickens an. Serverzeit wohlgemerkt. Wie gesagt nicht besonders einfallsreich, aber als Einstieg passend. Diese angegebenen Events werden immer ausgeführt.

Ich habe Ihnen aber für Events die aber nur genau einmal bei Seitenaufruf ausgeführt werden sollen eine Abhilfe versprochen. Bei solchen Events verwenden wir die Page.IsPostBack Property bzw. Eigenschaft.

Wie immer hierzu ein Beispiel (Datei Page_Postback.aspx).

...
void Page_Load(Object Src, EventArgs E)
{
  if (!Page.IsPostBack)
  {
    lblStatus.Text="Es hat noch kein PostBack stattgefunden!";
  }
  else
  {
    lblStatus.Text="<font color=\"red\">PostBack hat stattgefunden!</font>";
  }
}
...

Hier wird vorerst mit Hilfe eines if-Statements geprüft, ob ein PostBack statt gefunden hat. Ist dies nicht der Fall (!Page.IsPostBack ist true) wird die Meldung "Es hat noch kein PostBack stattgefunden!" im Browserfenster ausgegeben. Wenn der Button dann betätigt wird natürlich ein PostBack auf den WebServer durchgeführt und die entsprechende Meldung ausgegeben.

Wie Sie sicherlich bemerkt haben, haben sich schon Events von ASP.NET WebForms eingeschlichen. Da ich Ihnen diese nicht länger vorenthalten will, gehen wir zum nächsten Punkt über.

Events bei ASP.NET WebForms

Nun, das Grundverständnis was ein von einer ASP.NET Web Form Control getriggerter Event verrichten kann, haben Sie bereits in den vorigen Beispielen gesehen. Das ist bei weitem noch nicht alles. Die nun folgenden Beispiel besitzten trotz ihrer Einfachheit schon einige Raffinessen.

Für das nächste Beispiel möchte ich das Registrierungsbeispiel recyclen. Ich habe es um einige Features bereichert und in zwei unterschiedlichen Versionen abgespeichert. Besprechen wir zunächst die einfachere (Datei EmailForm.aspx).

Sehen wir uns zunächst die Funktion des "Formular löschen" Buttons an. Im Scriptblock ist der onClick-Event wie folgt beschrieben:

...
void btnReset_Click(Object Sender, EventArgs E)
{
 if (Page.IsPostBack)
 {
 txtName.Text="";
 txteMail.Text="";
 lblNameOut.Text="";
 lbleMailOut.Text="";
 }
}
...

Wenn der Client den "Formular löschen"-Button anklickt so werden den angeführten Feldern ein Leerstring zugewiesen (Wichtig: Page.IsPostBack ist hier nicht zu negieren!). In der Sektion "Ihre übermittelten Daten:" des Scripts sind die Werte, die beim Postback übermittelt werden, noch einmal ausgegeben.

Gehen wir nun zu weiterer Eventfunktionalität, die sich in der Datei EmailForm2.aspx befindet (man beachte den kreativen Dateinamen!).

In diesem Fall übergebe ich bei einem PostBack die vom Client eingegebenen Daten mittels eines QueryStrings auf eine neue Seite. Zugegeben, der QueryString ist eine veraltete und für sicherheitssensitive Daten unbrauchbare Methode, aber dennoch einfach und funktionell.

Die Submit Funktion sieht somit so aus:

...
void btnSubmit_Click(Object Sender, EventArgs E)
{
 if (Page.IsPostBack)
 {
   if (txtName.Text != "")
   {
     Response.Redirect("datasubmitted.aspx?name=" + txtName.Text + "&email=" 
     + txteMail.Text);
   }
   else
   {
     lblMsg1.Text = "Es ist ein Fehler aufgetreten!";
   } 
 }
}

Um auf eine neue Seite zu verweisen verwende ich die Navigate-Methode der Page-Klasse. Die Methode erhält die Ziel-Seite (datasubmitted.aspx) und den QueryString mit den zu übermittelnden Parametern "name=" und "email=". Da die Werte via Web Form Controls übergeben werden ist der Postfix .Text zusätzlich zur Web Form Control ID anzugeben.

Auf der Ziel-Seite datasubmitted.aspx präsentieren sich dann die übermittelten Daten, indem sie mittels des Page_Load Events eingelesen werden:

...
void Page_Load(Object Sender, EventArgs E)
{
  if (!Page.IsPostBack)
  {
     lblNameOut.Text = Request.Params["Name"];         
     lbleMailOut.Text = Request.Params["email"];
  }
}
...

Das letzte Thema für heute bestimmt erstens die Wertübergabe aus ASP.NET List Web Form Controls, d.h. beim PostBack wird der Wert, den Sie ausgewählt haben übermittelt. Weiters präsentiere ich Ihnen eine weitere Event-Eigenschaft der ASP.NET Web Form Controls - den "automatischen" Postback der getriggert wird sobald Sie eine Auswahl treffen bzw. den Inhalt einer Web Form Control verändern.

Das präsentierte Beispiel enthält eine RadioButtonList und eine DropDownList. Das Problem bei der RadioButtonList ist, daß für den Fall, daß nichts ausgewählt wurde, die ASP.NET Runtime die NullReferenceException zurückgegeben wird. Eigentlich kein wirkliches Problem - oder? Einfach mittels dem catch Statement die Exeception aus dem try Statement abfangen - Heureka, that's it! Da natürlich der Hinweis in der DropDownList "-Kategorie auswählen-" keine tatsächliche Kategorie ist wissen doch (fast) alle. Für alle die es noch nicht wissen, habe ich per if-Statement die Möglichkeit zur ungültigen Auswahl genommen.

...
void btnSubmit_Click(Object Src, EventArgs E )
{
  try
  {
    if (Level.SelectedItem.Text !="")
    {
      lblMsg1.Text = "Benutzer Level: " + Level.SelectedItem.Text +"<br>";
    }
    
  }
  catch (NullReferenceException e)
  {  
    lblMsg1.Text = "<font color=\"red\">Ungültige Level-Auswahl!</font><br>";
  }
  
  if (Thema.SelectedItem.Text !="-Kategorie auswählen-")
  {
    lblMsg2.Text = "Thema: " + Thema.SelectedItem.Text;
  }
  else
  {
    lblMsg2.Text = "<font color=\"red\">Ungültige Thema-Auswahl!</font>";
  }
}
...

Die Wertübergabe des ausgewählten Items über die SelectedItem Property und muß hier wiederum den Postfix .Text beinhalten.

Mit Hilfe des Attributs AutoPostBack="True" einer ASP.NET Web Form Control wird sofort nach Veränderung der Control ein PostBack durchgeführt.

Nehmen wir als Beispiel die RadioButtonList Control:

...
<asp:RadioButtonList id="Level" runat="server" AutoPostBack="True">
      <asp:listitem selected="True">Beginner</asp:listitem>
      <asp:listitem>Fortgeschrittener</asp:listitem>
      <asp:listitem>Experte</asp:listitem>    
</asp:RadioButtonList>
...

Das ListItem-Attribut selected="True" besagt, daß dieser Auswahlpunkt standardmäßig aktiviert wird.

Sobald Sie in diesem Beispiel eine Auswahl treffen, wird sofort ein PostBack durchgeführt und die Änderungen in der Sektion "Ihre aktuelle Auswahl:" angezeigt. Das bietet dem Client die Möglichkeit zu "experimentieren". Sie können Ihm z.B. seine Änderungen präsentieren bevor Sie sie letztendlich in einer Datenbank speichern.

Schlußbemerkung

Mit diesem als Einführung in die (fast) unbegrenzten Möglichkeiten des Eventhandlings bei ASP.NET gedachten Artikel, sollten Sie das Grundrüstzeug besitzten ASP.NET Seiten quasi zum Leben zu "erwecken". Wir besprachen den Page_Load Event, die Page.IsPostBack Property und schließlich die Eventbehandlung bei ASP.NET Web Form Controls. Damit auch schon versiertere Programmierer einen Nutzen aus diesem Artikel ziehen habe ich zusätzliche Möglichkeiten der Wertübergabe mittels QueryString, eine Anwendung des Exception Handlings auf die Web Form Controls, sowie von Validation Contols präsentiert.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Der ODBC .NET Data Provider
Einführung in ASP.NET Validation Controls (Teil 1)
Einführung in ASP.NET Validation Controls (Teil 2)
Einführung in ASP.NET Web Forms
Formularbasierte Authentifizierung in fünf Minuten
MS IE WebControls 101
Zahl, Datum und Währung korrekt formatiert ausgeben

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.