Kapitel 6 HTML-Serversteuerelemente
Der Entwickler zu ASP.NET: »Darf ich vorstellen? Ein Text-Eingabefeld mit der Bezeichnung txtEMail.«
ASP.NET: »Angenehm, Element txtEMail. Wie ich sehe, stammen Sie von HtmlInputText ab.«
Wenn Sie in einer aspx-Seite keine serverseitigen Steuerelemente, sondern nur reinen HTML-Code verwenden, dann »kennt« ASP.NET Ihre Seite eigentlich nicht. ASP.NET sieht in Ihrer Seite nur eine beliebige Folge von Zeichen, deren Sinn ASP.NET völlig verborgen bleibt. Erst durch die Verwendung von serverseitigen Steuerelementen gewinnt die Seite an Intelligenz. »Ach so«, sagt ASP.NET dann beispielsweise, »das hier soll ein Texteingabefeld sein. Ja, dann kann ich diese und jene Eigenschaften beeinflussen.«
Das Praktische an den HTML-Serversteuerelementen ist, dass Sie wirklich jedes beliebige HTML-Element in ein serverseitiges Steuerelement umwandeln können, indem Sie bei diesem Element lediglich zwei Attribute ergänzen:
|
runat="server" und |
|
id ="eineIDIhrerWahl". |
Durch runat="server" wird ein Element in ein serverseitiges Steuerelement verwandelt, und eine id benötigen Sie, um im Code auf dieses Steuerelement zugreifen zu können.
Mit runat="server" sagen Sie gewissermaßen zu ASP.NET: »Darf ich Sie miteinander bekannt machen?« Und ASP.NET antwortet: »Angenehm, das Steuerelement sowieso kennen zu lernen«, und kennt fortan Ihr Element von Angesicht zu Angesicht. Diejenigen HTML-Elemente, die Sie ASP.NET nicht einzeln vorstellen, subsumiert ASP.NET zur Kategorie System.Web.UI.LiteralControl. Objekte vom Typ LiteralControl enthalten mit HTML-Auszeichnungen versehenen Text, den ASP.NET nicht interpretiert, sondern einfach nur wortwörtlich übernimmt und zum Browser schickt.
Ein HTML-Serversteuerelement findet im HTML-Code stets seine Entsprechung in genau einem HTML-Element. Ein Objekt vom Typ LiteralControl kann demgegenüber zahlreiche HTML-Elemente und sogar eine komplette HTML-Seite enthalten.
Tabelle 6.1 zeigt eine Übersicht, welche HTML-Elemente in welche HTML-Serversteuerelemente umgeformt werden. Insbesondere für alle Eingabesteuerelemente stellt ASP.NET eigene Klassen zur Verfügung. Eigene Klassen gibt es außerdem für Tabellen, Bilder und Referenzen. Alle übrigen HTML-Elemente werden serverseitig mit Hilfe der Klasse HtmlGenericControl verwaltet.
| HTML-Element mit dem Zusatz runat="server"
|
HTML-Serversteuerelement
|
| img
|
HtmlImage
|
| table
|
HtmlTable
|
| td
|
HtmlTableCell
|
| tr
|
HtmlTableRow
|
| a
|
HtmlAnchor
|
| form
|
HtmlForm
|
| button
|
HtmlButton
|
| input type="button"
|
HtmlInputButton
|
| input type="submit"
|
HtmlInputButton
|
| input type="reset"
|
HtmlInputButton
|
| input type="text"
|
HtmlInputText
|
| input type="password"
|
HtmlInputText
|
| input type="checkbox"
|
HtmlInputCheckBox
|
| input type="radio"
|
HtmlInputRadioButton
|
| input type="file"
|
HtmlInputFile
|
| input type="hidden"
|
HtmlInputHidden
|
| input type="image"
|
HtmlInputImage
|
| select
|
HtmlSelect
|
| textarea
|
HtmlTextArea
|
| alle anderen HTML-Elemente
|
HtmlGenericControl
|
| Text mit HTML-Auszeichnungen ohne den Zusatz runat="server"
|
LiteralControl
|
Tabelle 6.1 Für HTML-Elemente mit dem Attribut runat="server" erstellt ASP.NET jeweils ein Objekt dieses Typs.
| Tipp HTML-Serversteuerelemente eignen sich gut, wenn eine bestehende Webapplikation in eine ASP.NET-Applikation umgewandelt werden soll. Sie müssen die Seiten nicht in die höhere Abstraktionsstufe der Webserversteuerelemente umformen, sondern Sie können nah am HTML-Code bleiben und einzelne Elemente gezielt beeinflussen.
|
In Kapitel 4, »Hallo, Welt!« – Ein ASP.NET-Crashkurs, haben Sie bereits Bekanntschaft mit HTML-Serversteuerelementen geschlossen. In diesem Kapitel lernen Sie die Hierarchie der zugrunde liegenden Klassen und den Umgang mit den Eigenschaften und Methoden detaillierter kennen.
6.1 System.Web.UI.LiteralControl
 
Die Klasse System.Web.UI.LiteralControl gehört nicht zu den HTML-Serversteuerelementen. Ich stelle diese Klasse dennoch hier kurz vor, weil Sie unweigerlich über sie stolpern werden, wenn Sie mit HTML-Serversteuerelementen arbeiten. Die Klasse LiteralControl wird am besten über eine Negation charakterisiert: Zu einem LiteralControl wird alles das, was Sie ASP.NET nicht mittels runat="server" explizit bekannt machen. Sobald Sie einem Element den Zusatz runat="server" hinzufügen, ist das jeweilige Element kein LiteralControl mehr, sondern ein spezialisiertes HTML-Serversteuerelement, für das ASP.NET besondere Klassen zur Verfügung stehen. Wenn dieser Zusatz jedoch unterbleibt, erkennt ASP.NET nur einen unspezifischen LiteralControl.
Das Skript LiteralControl01.aspx demonstriert nur, dass ein LiteralControl in gewisser Hinsicht überhaupt nichts kann. Mit einem LiteralControl erzielen Sie den gleichen Effekt, wie wenn Sie den HTML-Code direkt in den HTML-Block der aspx-Seite schreiben würden.
<!-- LiteralControl01.aspx-->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
Dim litCtrl As New LiteralControl
litCtrl.Text = "Das ist aber <b>toll!</b>"
meinAbsatz.Controls.Add (litCtrl)
End Sub
</script>
<html><head><title>LiteralControl-Demo</title></head>
<body>
<p runat="server" id="meinAbsatz">
Hier ist ein Absatz.
</p>
</body>
</html>
Der HTML-Block enthält lediglich einen einzelnen Absatz, den Sie mit runat="server" ASP.NET bekannt machen. Beim Laden der Seite führt der Interpreter die Ereignisprozedur Page_Load aus. Der Code erzeugt ein neues Objekt der Klasse LiteralControl und weist ihrer Eigenschaft Text den Wert "Das ist aber <b>toll!</b>" zu. Dieses LiteralControl-Objekt wird anschließend an die Controls-Collection des hart codierten Absatzes angefügt.
Abbildung 6.1 zeigt das Resultat. Der ergänzte Text erscheint hinter dem bisherigen Text des Absatzes. Alternativ hätten Sie den Text exakt so im HTML-Code angeben können oder Sie hätten beispielsweise auch die InnerHTML-Eigenschaft des Absatzes modifizieren können.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 6.1 Ein LiteralControl enthält reinen HTML-Code, den der ASP.NET-Interpreter nicht beeinflusst.
Sobald Sie aber ein Element mit runat="server" der ASP.NET-Engine vorstellen, sortiert ASP.NET den neuen Bekannten in eine seiner zahlreichen Klassen-Schubladen ein, die Sie nun näher kennen lernen werden.
|