Homepage-Webhilfe Event-Banner

Webserver-Steuerelemente

Webserver-Steuerelemente befinden sich im Namensraum System.Web.UI.WebControls und haben im Gegensatz zu HTML-Server-Elementen (Namensraum System.Web.UI.HtmlControls) ein paar Vorteile. Ein Vorteil ist z. B., dass bei Webserver-Steuerelementen Events registriert werden können. Ereignisse können nicht direkt ausgelöst werden, sondern deren Ereignisstatus wird lediglich im Ansichtszustand gespeichert. Beim nächsten Übertragen des Formulars wird der Ereignisstatus an den Server zurückgeschickt, welcher dann letztendlich die Event-Behandlungsmethoden ausführt. Sollen Ereignisse direkt ausgelöst werden, so kann bei einigen Steuerelementen die Eigenschaft AutoPostBack gesetzt werden. Dadurch wird die Seite bei einer Änderung direkt an den Server „gepostet“. Dies hat ein Neuladen der Seite zur Folge, was nicht immer erwünscht ist.

Im Gegensatz zu HTML-Elementen haben Webserver-Steuerelemente „einfachere“ Einstellungsmöglichkeiten. Diese können in ASP.NET bzw. C# mittels wenig Code festgelegt werden, wobei bei HTML-Elementen mehr Code notwendig wäre. Für einfachere Anwendungszwecke sind jedoch HTML-Server-Elemente oder sogar auch nur HTML-Elemente oft ausreichend. Webserver-Steuerelemente werden auch gerne bei komplexeren Steuerelementen eingesetzt, welche in HTML in einfacher Form nicht verfügbar sind. Hierbei lässt sich z. B. ein Kalender- oder Diagramm-Steuerelement nennen.

Webserver-Steuerelemente können im ASP.NET-Code (Datei .aspx) direkt eingefügt werden. Diese Elemente werden wie HTML-Elemente notiert und werden vor dem Senden an den Browser in „reinen“ HTML-Code (zumeist in Verbindung mit CSS- und JavaScript-Code) übersetzt. Die Elementnamen von Webserver-Steuerelementen beginnen mit dem Präfix asp gefolgt von einem Doppelpunkt und dem Namen des jeweiligen Steuerelements. Die Attribut-Namen entsprechen dem Namen der Eigenschaft der jeweiligen Klasse. Eine Ausnahme stellen Events dar, bei welchen das Schlüsselwort On vorangestellt werden muss.

Alle Webserver-Steuerelemente müssen das Attribut runat mit dem Wert server besitzen. Ist ein Zugriff auf das Element erwünscht, so muss noch zusätzlich das ID-Attribut angegeben werden. Mit dem dort definierten Namen kann auf das Steuerelement zugegriffen werden. Alle Webserver-Steuerelemente sind von der Basisklasse WebControl abgeleitet und besitzen somit ein paar gleiche Attribute:

ForeColor Vordergrundfarbe bzw. Textfarbe
Font Schrifteinstellungen (Objekt der Klasse FontInfo)
BackColor Hintergrundfarbe
BorderColor Farbe des Rahmens
BorderStyle Stil des Rahmens
BorderWidth Breite des Rahmens
CssClass CSS-Klasse des Steuerelements
Height Höhe des Steuerelements
Width Breite des Steuerelements
Enabled Gibt an, ob das Steuerelement aktiviert ist
Visible Gibt an, ob das Steuerelement angezeigt werden soll
ToolTip Text, welcher beim Darüberfahren über das Element angezeigt werden soll

Wichtig: Wie bereits erwähnt, werden für einige Steuerelemente JavaScript benötigt. Ist JavaScript im Browser deaktiviert, so funktionieren einige Elemente u. U. nicht mehr korrekt.


In ASP.NET gibt es einige Steuerelemente, die sehr ähnlich zu HTML-Elementen sind. Dazu zählen z. B. ein Bild (asp:Image), ein Link (asp:HyperLink), eine Liste (asp:BulletedList), eine Tabelle (asp:Table) und ein Textblock (asp:Label).

Mit dem Steuerelement Image können wir ein Bild darstellen. Die URL zum Bild wird mittels der Eigenschaft ImageUrl festgelegt. Breite und Höhe können über die Eigenschaften Width und Height festgelegt werden.

Das Steuerelement HyperLink stellt einen Link / Verweis dar. Die Eigenschaft NavigateUrl gibt die URL an, auf welcher der Link verweist. Mit der Eigenschaft Target wird das Zielfenster festgelegt. Als Werte sind hier die gleichen Werte wie beim Attribut target des HTML-Elements a verfügbar. Mittels der Eigenschaften ImageUrl (URL des Bilds), ImageHeight (Höhe des Bilds) und ImageWidth (Breite des Bilds) wird das Bild für den Hyperlink festgelegt. Die Parameter werden weggelassen, wenn kein Bild für den Link erwünscht ist. Die Eigenschaft Text legt den anzuzeigenden Link-Text fest.

BulletedList stellt eine geordnete oder auch ungeordnete Liste dar (vergleichbar mit dem ul- und ol-Element in HTML). Der Stil der Liste kann mittels der Eigenschaft BulletStyle festgelegt werden. Folgende Werte aus der Enumeration BulletStyle sind möglich: Circle (leerer Kreis), Disc (ausgefüllter Kreis), Square (ausgefülltes Quadrat), LowerAlpha (kleine lateinische Buchstaben), LowerRoman (kleine römische Buchstaben), UpperAlpha (große lateinische Buchstaben), UpperRoman (große römische Buchstaben), Numbered (nummerisch), CustomImage (Bild, welches über BulletImageUrl festgelegt ist) oder NotSet (nicht festgelegt, Wahl vom Browser). Mit der Eigenschaft DisplayMode kann der „Anzeigemodus“ der Listeneinträge festgelegt werden: Text (reiner Text ohne Link), HyperLink (URL-Link, Link festgelegt über Eigenschaft Value des einzelnen Eintrags) oder LinkButton („Server-Link“, durch den Klick wird die Seite „gepostet“ und ein Ereignis ausgelöst). Die Listeneinträge können über die Eigenschaft Items abgerufen werden. Innerhalb des HTML-Codes können die Einträge mit dem Element asp:ListItem angegeben werden (siehe folgendes Beispiel).

Auf die Table-Klasse gehen wir weiter unten noch separat ein.

Das Steuerelement Label stellt eine „Beschriftung“ oder allgemein gesagt einen Textblock dar. Der Inhalt bzw. die Beschriftung kann mittels der Eigenschaft Text festgelegt werden.

Im folgenden Beispiel werden die Steuerelemente Image, HyperLink und BulletedList verwendet. Für das BulletedList-Element wurde ein Click-Ereignis (Attribut OnClick) registriert, wodurch das angeklickte Element rot gefärbt und das ausgewählte Element angezeigt wird.

<form runat="server">
	<asp:Image ImageUrl="ASP-NET.png" Width="100" Height="100" runat="server" />
	<br />
	<asp:HyperLink Text="Zum ASP.NET Kapitel" NavigateUrl="https://www.homepage-webhilfe.de/ASP-NET/" Target="_blank" runat="server" />
	<br />
	<asp:BulletedList ID="AuswahlListe" BulletStyle="Square" DisplayMode="LinkButton" OnClick="AuswahlListe_Click" runat="server">
		<asp:ListItem Value="PHP" />
		<asp:ListItem Value="Perl" />
		<asp:ListItem Value="ASP.NET" />
		<asp:ListItem Value="Java EE" />
	</asp:BulletedList>
	<asp:Label ID="AuswahlAnzeige" Text="Sie haben keine Auswahl getroffen!" runat="server" />
</form>
using System;
using System.Web.UI.WebControls;

namespace HWhBsp.Basiselemente
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void AuswahlListe_Click(object sender, BulletedListEventArgs e)
        {
            AuswahlListe.Items[e.Index].Attributes.CssStyle.Add("color", "red");
            AuswahlAnzeige.Text = "Sie haben auf das " + (e.Index + 1) + ". Element geklickt";    
        }
    }
}
VorschauDownload

Die Formularelemente von ASP.NET sind weitestgehend selbsterklärend und vergleichbar mit denen, welche wir vom „reinen“ HTML bereits kennen. Trotzdem wollen wir auf diese noch kurz etwas eingehen. Als Elemente sind asp:TextBox (Textfeld), asp:CheckBox (Kontrollkästchen), asp:RadioButton (Element einer Auswahlgruppe), asp:DropDownList (Auswahlliste) und asp:Button (Schaltfläche) zu nennen. Für das Textfeld kann mittels der Eigenschaft ReadOnly festgelegt werden, ob der Inhalt des Textfelds schreibgeschützt ist. Die Eigenschaft Wrap steuert den automatischen Zeilenumbruch. Mittels der Eigenschaft TextMode kann festgelegt werden, ob es sich um ein einzeiliges Textfeld (SingleLine), ein mehrzeiliges Textfeld (MultiLine), ein Passwort (Password) oder ein anderes spezielles Textfeld (z. B. Date für Datumseingabe oder Time für Uhrzeiteingabe) handelt. Für ein Kontrollkästchen kann mittels der Eigenschaft Checked abgerufen oder festgelegt werden, ob das Kontrollkästchen ausgewählt wurde. Radio-Buttons (Auswahlgruppen) werden über die Eigenschaft GroupName gruppiert, können jedoch alle eine individuelle ID besitzen, um somit vom Server separiert darauf zuzugreifen (siehe Beispiel). Um abzurufen, ob ein Element einer Auswahlgruppe ausgewählt wurde, kann die Eigenschaft Checked verwendet werden. Der Wert des Textfelds, des Kontrollkästchens oder des Elements der Auswahlgruppe kann über die Eigenschaft Text abgerufen werden. Eine Auswahlliste enthält Elemente des Typs ListItem. Diese verfügen über die Eigenschaften Text (anzuzeigende Beschriftung) und Value („interner“ Wert). Wird auf eine Schaltfläche geklickt, so wird die Seite „gepostet“. Die vier genannten Webserver-Steuerelemente verfügen auch über ein paar Ereignisse: TextChanged (für Textfelder), CheckedChanged (für Kontrollkästchen und Elemente einer Auswahlgruppe), SelectedIndexChanged (für Auswahllisten) oder Click (für eine Schaltfläche). Hierzu nun ein etwas komplexeres Beispiel:

<form action="Default.aspx" method="post" runat="server">
	<table>
		<tr>
			<td style="width: 100px;">Anrede:</td>
			<td>
				<asp:RadioButton ID="AnredeH" GroupName="Anrede" Text="Herr" Checked="true" runat="server" />
				<asp:RadioButton ID="AnredeF" GroupName="Anrede" Text="Frau" runat="server" />
			</td>
		</tr>
		<tr>
			<td style="width: 100px;">Vorname:</td>
			<td><asp:TextBox ID="Vorname" runat="server" /></td>
		</tr>
		<tr>
			<td style="width: 100px;">Nachname:</td>
			<td><asp:TextBox ID="Nachname" runat="server" /></td>
		</tr>
		<tr>
			<td style="width: 100px;">Grund:</td>
			<td>
				<asp:DropDownList ID="Grund" runat="server">
					<asp:ListItem Value="PHP" Text="PHP" />
					<asp:ListItem Value="Perl" Text="Perl" />
					<asp:ListItem Value="ASP" Text="ASP.NET" />
					<asp:ListItem Value="Java" Text="Java EE" />
				</asp:DropDownList>
			</td>
		</tr>
		<tr>
			<td style="width: 100px;">Nachricht:</td>
			<td><asp:TextBox ID="Nachricht" TextMode="MultiLine" runat="server" /></td>
		</tr>
		<tr>
			<td style="width: 100px;">Newsletter:</td>
			<td><asp:CheckBox ID="Newsletter" runat="server" /></td>
		</tr>
		<tr>
			<td></td>
			<td><asp:Button ID="BeispielBtn" Text="Beispielwerte" OnClick="BeispielBtn_Click" runat="server" /></td>
		</tr>
		<tr>
			<td></td>
			<td><asp:Button ID="PruefBtn" Text="Prüfen" OnClick="PruefBtn_Click" runat="server" /></td>
		</tr>
		<tr>
			<td></td>
			<td><asp:Button ID="VersandBtn" Text="Versenden" OnClick="VersandBtn_Click" Enabled="false" runat="server" /></td>
		</tr>
	</table>
</form>
using System;
using System.Drawing;

namespace HWhBsp.Formularelemente
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void BeispielBtn_Click(object sender, EventArgs e)
        {
            // Felder mit Beispielwerten füllen
            AnredeF.Checked = false;
            AnredeH.Checked = true;
            Vorname.Text = "Max";
            Nachname.Text = "Mustermann";
            Grund.SelectedValue = "ASP";
            Nachricht.Text = "Hier steht der Inhalt der Nachricht ...";
            Newsletter.Checked = false;

            // Prüf-Funktion aufrufen
            PruefBtn_Click(null, EventArgs.Empty);
        }

        protected void PruefBtn_Click(object sender, EventArgs e)
        {
            bool bError = false;

            // Überprüfen ob Eingabefelder leer sind
            if (Vorname.Text == "")
            {
                Vorname.BackColor = Color.Red;
                bError = true;
            }
            else
                Vorname.BackColor = Color.Transparent;
            if (Nachname.Text == "")
            {
                Nachname.BackColor = Color.Red;
                bError = true;
            }
            else
                Nachname.BackColor = Color.Transparent;
            if (Nachricht.Text == "")
            {
                Nachricht.BackColor = Color.Red;
                bError = true;
            }
            else
                Nachricht.BackColor = Color.Transparent;

            // Versand-Button aktivieren oder deaktivieren
            VersandBtn.Enabled = !bError;
        }

        protected void VersandBtn_Click(object sender, EventArgs e)
        {
            // Formularfelder deaktivieren
            AnredeH.Enabled = false;
            AnredeF.Enabled = false;
            Vorname.Enabled = false;
            Nachname.Enabled = false;
            Grund.Enabled = false;
            Nachricht.Enabled = false;
            Newsletter.Enabled = false;
            BeispielBtn.Enabled = false;
            PruefBtn.Enabled = false;
            VersandBtn.Enabled = false;
        }
    }
}
VorschauDownload

Wichtig: Beachten Sie, dass Ereignisse nicht direkt ausgelöst werden. Ist dieser Effekt erwünscht (dadurch wird auch die Seite neu geladen), so kann die Eigenschaft AutoPostBack auf true gesetzt werden.

Übrigens: Eine Auswahlgruppe kann an Stelle mit RadioButton-Steuerelementen auch mit einem RadioButtonList-Steuerelement und mehreren ListItem-Elementen gelöst werden.


Kalender-Screenshot Mit dem Webserver-Steuerelement Calendar wird uns eine Auswahl für einen Tag (Day), einen Tag oder eine Woche (DayWeek) oder einen Tag, eine Woche oder einen Monat (DayWeekMonth) zur Verfügung gestellt. Dieser Selektierungsmodus kann mittels der Eigenschaft SelectionMode festgelegt werden. Die Auswahl spiegelt sich grundsätzlich in Form eines Kalenders wieder. Der Kalender besitzt für die Darstellung diverse Eigenschaften, welche sich in die Gruppen aktuelles Datum (TodayDayStyle), ausgewähltes Datum (SelectedDayStyle), Wochenende (WeekendDayStyle), anderer Monat (OtherMonthDayStyle) und anderer Tag (DayStyle) aufteilen lässt. Das Auswählen eines Tags, einer Woche oder eines Monats hat zur Folge, dass die Seite neu geladen wird. Das selektierte Datum bzw. die selektierten Daten lassen sich über SelectedDate bzw. SelectedDates abrufen oder setzen. Als Ereignisse sind SelectionChanged (Auswahl wurde geändert) und VisibleMonthChanged (Monat, welcher angezeigt wird, wurde geändert).

<form runat="server">
	<asp:Calendar ID="Kalender" SelectedDayStyle-BackColor="Blue" OtherMonthDayStyle-BackColor="Yellow" WeekendDayStyle-BackColor="Orange" TodayDayStyle-BackColor="Red" runat="server" />
	<p>Ausgewähltes Datum: <%= Kalender.SelectedDate != DateTime.MinValue ? Kalender.SelectedDate.ToLongDateString() : "-" %></p>
</form>
VorschauDownload

Mit der Klasse Table und dem dazugehörigen Steuerelement können Sie eine Tabelle darstellen. Vorteil dieses Webserver-Steuerelements gegenüber des klassischen HTML-Elements table ist, dass der Zugriff auf die Zeilen und Zellen leichter ist und somit die sogenannte Manipulation schneller und einfacher erfolgen kann. Der Aufbau dieser ASP.NET-Tabelle ist gleich wie der, der HTML-Tabelle: es gibt Zeilen (TableRow), welche eine oder mehrere Zellen (TableCell) enthalten können. Des Weiteren existieren die Steuerelemente TableHeaderRow (Kopfzeile), TableFooterRow (Fußzeile) und TableHeaderCell (Header-Zelle). Im Beispiel wird der Inhalt der Tabelle dynamisch über ein zwei-dimensionales Array im Load-Ereignis der Seite gefüllt:

<form runat="server">
	<asp:Table ID="KundenListe" runat="server">
		<asp:TableHeaderRow>
			<asp:TableCell Text="ID" />
			<asp:TableCell Text="Vorname" />
			<asp:TableCell Text="Nachname" />
		</asp:TableHeaderRow>
	</asp:Table>
</form>
using System;
using System.Web.UI.WebControls;

namespace HWhBsp.Tabelle
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string[][] aKundenListe = new string[][] {
                new string[] { "0", "Steve", "Peters" },
                new string[] { "1", "Lisa", "Meyer" },
                new string[] { "2", "Mark", "Kirsch" },
                new string[] { "3", "Nathalie", "Lehmann" },
                new string[] { "4", "Ulrike", "Wagner" }
            };

            // Zeilen hinzufügen
            for (int i = 0; i < aKundenListe.Length; i++)
            {
                TableRow oRow = new TableRow();
                // Zellen hinzufügen
                for (int j = 0; j < aKundenListe[i].Length; j++)
                {
                    TableCell oCell = new TableCell();
                    oCell.Text = aKundenListe[i][j];
                    oRow.Cells.Add(oCell);
                }
                KundenListe.Rows.Add(oRow);
            }
        }
    }
}
VorschauDownload

Diagramm-Screenshot Das Steuerelement asp:Chart macht es möglich, ohne weitere externe Libraries ein Diagramm darzustellen. Innerhalb des Chart-Elements werden weitere Elemente angegeben, um die Diagrammbereiche (ChartAreas), Datenreihen (Series) und Legenden (Legends) zu definieren. Natürlich kann dies auch über die Code-Behind-Datei gemacht werden. Der Aufbau der Eigenschaften und Klassen ist dabei den Diagramm-Klassen für Windows Forms Applikationen (Namensraum System.Windows.Forms.DataVisualization.Charting) ähnlich. Im Beispiel gibt es einen Diagrammbereich mit drei Datenreihen. Jede Datenreihe besitzt 20 Werte, welche dynamisch generiert (Klasse Random) werden.

<form runat="server">
	<asp:Chart ID="Diagramm" runat="server" Width="600" Height="300">
		<Series>
			<asp:Series ChartType="Line" Color="Red" Name="SerieA"></asp:Series>
			<asp:Series ChartType="Line" Color="Lime" Name="SerieB"></asp:Series>
			<asp:Series ChartType="Line" Color="Blue" Name="SerieC"></asp:Series>
		</Series>
		<ChartAreas>
			<asp:ChartArea Name="Bereich">
				<AxisX IsMarginVisible="false" />
			</asp:ChartArea>
		</ChartAreas>
	</asp:Chart>
</form>
using System;

namespace HWhBsp.Diagramm
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Random oZufall = new Random();
            for (int i = 0; i < 20; i++)
            {
                Diagramm.Series["SerieA"].Points.Add(oZufall.Next(0, 101));
                Diagramm.Series["SerieB"].Points.Add(oZufall.Next(0, 101));
                Diagramm.Series["SerieC"].Points.Add(oZufall.Next(0, 101));
            }
        }
    }
}
VorschauDownload

Wichtig: Um ein Chart-Element nutzen zu können, muss innerhalb der ASPX-Datei ein Assembly „registriert“ werden (Direktive Register). Dies sieht wie folgt aus:

<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>

Des Weiteren muss das Assembly in der Konfigurationsdatei Web.config hinzugefügt werden. Zudem muss ein „Handler“ hinzugefügt werden. Die Konfigurationsdatei von unserem Beispiel sieht wie folgt aus:

<?xml version="1.0"?>

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </assemblies>
    </compilation>
  </system.web>
  <system.webServer>
    <handlers>
      <add name="ChartImg" verb="*" path="ChartImg.axd"  type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </handlers>
  </system.webServer>
</configuration>

ASP.NET bietet ein paar Webserver-Steuerelemente, welche dazu genutzt werden, den Inhalt oder Wert eines anderen Feldes zu prüfen. Für diese sogenannte „Validierungs-Steuerelemente“ wird im Browser JavaScript-Code ausgeführt. Die Validierung erfolgt jedoch auch zusätzlich auf dem Webserver (dazu gleich mehr). Die folgenden Validierungs-Steuerelemente wollen wir hier detaillierter erklären: RequiredFieldValidator, RangeValidator und RegularExpressionValidator. Alle Validierungs-Elemente besitzen die Eigenschaften ControlToValidate, mit welcher das zu überwachende Steuerelement festgelegt wird, und ErrorMessage, mit welcher der anzuzeigende Fehlertext angegeben wird. Die Überprüfung kann mittels der Eigenschaft Enabled deaktiviert werden. Über die Eigenschaft Display und einen Wert der Enumeration ValidatorDisplay wird das sogenannte Anzeigeverhalten festgelegt. Folgende Werte sind verfügbar: Dynamic (Meldung wird je nach Bedarf dynamisch ins Layout hinzugefügt oder wieder entfernt), Static (Meldung ist fester Bestandteil des Seitenlayouts und wird lediglich ein- und ausgeblendet) und None (Meldung wird nie inline angezeigt).

Für RequiredFieldValidator müssen keine weiteren Eigenschaften gesetzt werden. Die Fehlermeldung wird ausgegeben, wenn das verwiesene Feld nicht ausgefüllt wurde. Für das Steuerelement RangeValidator müssen noch die Eigenschaften MinimumValue und MaximumValue als Unter- und Obergrenze für den zulässigen Wertebereich gesetzt werden. Das Webserver-Steuerelement RegularExpressionValidator führt eine Validierung mittels eines regulären Ausdrucks aus. Dieser wird in der Eigenschaft ValidationExpression angegeben.

Die Validierung dieser Steuerelemente wird sowohl client- als auch serverseitig durchgeführt. Die clientseitige Überprüfung (und Anzeige der Fehlermeldungen) wird automatisch ausgeführt, sofern JavaScript im Browser aktiviert ist. Um eine serverseitige Validierung durchzuführen, muss als erstes die Funktion Validate() der Seite aufgerufen werden. Anschließend kann über die Eigenschaft IsValid geprüft werden, ob das Formular gültig ist. Diese Eigenschaft ist auch bei den Validator-Steuerelementen verfügbar, um somit ein einzelnes Steuerelement bzw. eine einzelne Regel auf Gültigkeit zu prüfen.

<form action="Default.aspx" method="post" runat="server">
	<%
		// Eingaben nur prüfen, wenn das Formular übertragen wurde
		if (this.Request.HttpMethod == "POST")
		{
			Validate();
			if (!this.IsValid)
				Response.Write("Ihre Eingaben enthalten Fehler!");
			else
				Response.Write("Ihre Eingaben sind gültig!");
		}
	%>
	<table>
		<tr>
			<td style="width: 100px;">Alter:</td>
			<td>
				<asp:TextBox ID="Alter" runat="server" />
				<asp:RangeValidator ControlToValidate="Alter" MinimumValue="12" MaximumValue="40" ErrorMessage="Sie müssen zwischen 12 und 40 Jahre alt sein!" Type="Integer" Display="Dynamic" runat="server" />
			</td>
		</tr>
		<tr>
			<td style="width: 100px;">E-Mail-Adresse:</td>
			<td>
				<asp:TextBox ID="EMailAdresse" runat="server" />
				<asp:RequiredFieldValidator ControlToValidate="EMailAdresse" ErrorMessage="Bitte geben Sie eine E-Mail-Adresse ein!" Display="Dynamic" runat="server" />
				<asp:RegularExpressionValidator ControlToValidate="EMailAdresse" ErrorMessage="Das Format der E-Mail-Adresse ist ungültig!" ValidationExpression="[a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]{1,}@[a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]{1,}\.[a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]{1,}" Display="Dynamic" runat="server" />
			</td>
		</tr>
		<tr>
			<td></td>
			<td><input type="submit" value="Absenden" /></td>
		</tr>
	</table>
</form>
VorschauDownload

In ASP.NET können mittels der Webserver-Steuerelemente asp:MultiView und asp:View mehrere Anzeigen erzeugt werden, zwischen welchen umgeschaltet werden kann. Die Umschaltung der Ansichten ist nur serverseitig möglich, da an den Client lediglich der Inhalt der gewählten Ansicht gesendet wird. Im Beispiel kann mittels der Auswahlgruppe die Ansicht ausgewählt werden. Diese Selektierung löst das SelectedIndexChanged-Ereignis aus, wodurch die angegebene Ansicht selektiert wird. Über das ActiveViewChanged-Event, welches bei Änderung der Ansicht eintritt, wird in ein Label-Steuerelement die Nummer der Ansicht geschrieben. Die Selektierung einer Ansicht kann entweder mit der Funktion SetActiveView() oder über die Eigenschaft ActiveViewIndex erfolgen.

<form runat="server">
	<asp:Label ID="AktualIndex" Text="Aktuelle Ansicht: 0" runat="server" />
	<asp:RadioButtonList ID="SeitenSelektierung" AutoPostBack="true" OnSelectedIndexChanged="SeitenSelektierung_SelectedIndexChanged" runat="server">
		<asp:ListItem Text="Seite A (rot)" Value="0" Selected="True" />
		<asp:ListItem Text="Seite B (blau)" Value="1" />
		<asp:ListItem Text="Seite C (grün)" Value="2" />
	</asp:RadioButtonList>
	<asp:MultiView ID="Tabs" OnActiveViewChanged="Tabs_ActiveViewChanged" runat="server">
		<asp:View ID="TabA" runat="server">
			<div style="background-color: red; width: 400px; height: 300px"></div>
		</asp:View>
		<asp:View ID="TabB" runat="server">
			<div style="background-color: blue; width: 400px; height: 300px"></div>
		</asp:View>
		<asp:View ID="TabC" runat="server">
			<div style="background-color: lime; width: 400px; height: 300px"></div>
		</asp:View>
	</asp:MultiView>
</form>
using System;

namespace HWhBsp.Ansichten
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Tabs.SetActiveView(TabA);
        }

        protected void SeitenSelektierung_SelectedIndexChanged(object sender, EventArgs e)
        {
            Tabs.ActiveViewIndex = Convert.ToInt32(SeitenSelektierung.SelectedValue);
        }
        
        protected void Tabs_ActiveViewChanged(object sender, EventArgs e)
        {
            AktualIndex.Text = "Aktuelle Seite: " + Tabs.ActiveViewIndex;
        }
    }
}
VorschauDownload

Wichtig: Der Aufruf der Funktion SetActiveView() im Event-Handler des Load-Ereignisses der Seite ist notwendig, um eine Seite zu selektieren, falls noch keine Ansicht gewählt wurde. Wird eine Ansicht über die Auswahlgruppe ausgewählt, so wird also zuerst die 1. Ansicht selektiert (über das Load-Ereignis) und anschließend die gewünschte Ansicht (über das SelectedIndexChanged-Ereignis).

Übrigens: Um HTML-Elemente, HTML-Server-Steuerelemente und Webserver-Steuerelemente zu gruppieren, kann das Webserver-Steuerelement asp:Panel genutzt werden. Dort gibt es jedoch keine besonderen zu erwähnenden Eigenschaften oder Ereignisse.


Visual-Studio-Screenshot Mittels der AJAX-Technologie (welche wir bereits im Kapitel JavaScript erläutert haben) ist es möglich, Seitenbestandteile zur Laufzeit nachzuladen oder diese zu aktualisieren. In ASP.NET wird uns diese Technologie sehr vorteilhaft angeboten. Als Steuerelemente stehen uns hier ScriptManager, UpdatePanel und Timer zur Verfügung. Das Steuerelement ScriptManager muss lediglich einmal deklariert werden und dient dazu das AJAX-Modul einzubinden. Mit dem Steuerelement UpdatePanel kann ein Bereich (Seitenabschnitt) definiert werden, welcher bei einem AJAX-Ereignis neu geladen werden soll. Hierfür wird innerhalb des Elements ein Element mit dem Tagnamen ContentTemplate (entspricht der gleichnamigen Eigenschaft) notiert. In diesem können wiederum beliebig viele Elemente (sowohl HTML- als auch ASP.NET-Elemente) angegeben werden. Der Inhalt dieses Panels kann nun über verschiedene Trigger verändert werden. Tritt einer der Trigger ein, so wird eine Anfrage an den Server gesendet und der Inhalt des Abschnitts komplett neu geladen. Da diese Anfrage jedoch mittels der AJAX-Technologie und somit „versteckt“ bzw. im Hintergrund ausgeführt wird, wird dieses Laden durch den Besucher zumeist nicht registriert. Das (einteilige) Element Timer wird als Trigger für das UpdatePanel benutzt, um somit den Inhalt eines Seitenabschnitts zyklisch zu aktualisieren. Hierfür wird im Timer-Element die Eigenschaft Interval (Zeitabstand in Millisekunden) sowie das Ereignis Tick gesetzt. Um den Trigger im UpdatePanel-Element zu registrieren, muss das Element AsyncPostBackTrigger innerhalb der Eigenschaft Triggers (siehe Beispiel) platziert werden. Der Trigger wird über die Eigenschaften ControlID (Name des Elements, in diesem Fall des Timers) und EventName (Name des entsprechenden Events, in diesem Fall Tick) an ein Ereignis gebunden. Das Beispiel zeigt zwei UpdatePanel-Steuerelemente, wovon das erste sekündlich aktualisiert wird und das zweite lediglich beim Klick auf den Button.

<form runat="server">
	<asp:ScriptManager ID="AjaxManager" runat="server" />
	
	<%-- Zufallszahlen-Aktualisierung (sekündlich durch Timer) --%>
	<asp:Timer ID="SekundenTimer" Interval="1000" OnTick="SekundenTimer_Tick" runat="server" />
	<asp:UpdatePanel runat="server">
		<Triggers>
			<asp:AsyncPostBackTrigger ControlID="SekundenTimer" EventName="Tick" />
		</Triggers>
		<ContentTemplate>
			<b>Zufallszahl:</b>
			<br />
			<asp:Label ID="ZufallsWert" Text="-" runat="server" />
		</ContentTemplate>
	</asp:UpdatePanel>

	<br />
	
	<%-- Aktualisierung beim Buttonklick --%>
	<asp:UpdatePanel runat="server">
		<ContentTemplate>
			<b>Letzte Aktualisierung:</b>
			<br />
			<asp:Label ID="LetzteAktualisierung" Text="-" runat="server" />
			<br />
			<asp:Button ID="ZeitButton" Text="Jetzt aktualisieren" OnClick="ZeitButton_Click" runat="server" />
		</ContentTemplate>
	</asp:UpdatePanel>
</form>
using System;

namespace HWhBsp.AJAX_Technologie
{
    public partial class Default : System.Web.UI.Page
    {
        private Random oZufall = new Random();

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void SekundenTimer_Tick(object sender, EventArgs e)
        {
            ZufallsWert.Text = oZufall.Next(1, 1001).ToString();
        }

        protected void ZeitButton_Click(object sender, EventArgs e)
        {
            LetzteAktualisierung.Text = DateTime.Now.ToString();
        }
    }
}
VorschauDownload
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK