Inhalt Geleitwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.1 1.2 1.3 Was ist .NET?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programmiersprachen in Microsoft .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . Das .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Die Common Language Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Basisklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ASP.NET im .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ASP.NET im Vergleich zu ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ASP.NET im Vergleich zu ASP.NET 1.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die ASP.NET-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 38 38 41 41 42 43 44 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.1 2.2 Voraussetzungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation des .NET Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Installation des IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Installation des .NET Frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . Visual Web Developer Express Edition installieren . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 48 48 51 52 60 Spracheinführung Visual Basic 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.1 3.2 62 63 64 66 69 69 76 82 87 90 1.4 1.5 1.6 1.7 2 2.3 2.4 3 3.3 Zur Einführung: Die Geschichte von Visual Basic . . . . . . . . . . . . . . . . . . . . . Programmierung mit dem Visual Web Developer . . . . . . . . . . . . . . . . . . . . . 3.2.1 Erzeugung einer Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Das obligatorische »Hello World« . . . . . . . . . . . . . . . . . . . . . . . . . . Grundbegriffe von Datentypen bis zu Schleifen . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Standarddatentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Strukturierte Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4 Wertetyp- und Referenztypsemantik . . . . . . . . . . . . . . . . . . . . . . . . 3.3.5 Kontrollstrukturen und Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . Inhalt 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 4 100 100 104 114 115 115 118 123 123 124 125 125 126 127 128 129 129 133 133 133 135 135 136 138 139 141 145 148 150 Formulare mit HTML Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 4.1 4.2 4.3 8 Programmelemente und Programmebenen . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Funktionen und Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Objektorientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.3 Zusammenstellung von Bibliotheken, Einbindung von Namespaces und externen Objekten. . . . . . . . . . . . . . . . . . . . . . . . Basisfunktionen des .NET Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Standardfunktionen und Methoden zur Stringmanipulation . . . . . 3.5.2 Andere nützliche Methoden und Funktionen . . . . . . . . . . . . . . . . . Unterschiede zwischen Visual Basic 6 und Visual Basic 10 . . . . . . . . . . . . . 3.6.1 Das ist neu eingeführt worden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.2 Das hat sich verändert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kompilierung von Programmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.1 Aufruf des Befehlszeilencompilers . . . . . . . . . . . . . . . . . . . . . . . . . Bedingte Kompilierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fehler- und Ausnahmebehandlung in Visual Basic. . . . . . . . . . . . . . . . . . . . 3.9.1 Strukturierte Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.2 Die Exception-Klasse des .NET Frameworks . . . . . . . . . . . . . . . . . 3.9.3 Unstrukturierte Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.4 Die Erzeugung von Ausnahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . Visual Basic 10 Neuerungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.1 Dynamische Spracherweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.2 Auflistungsinitialisierer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Support von Visual Basic im Visual Web Developer. . . . . . . . . . . . . . . . . . . . 3.11.1 Ein erster Eindruck der Möglichkeiten . . . . . . . . . . . . . . . . . . . . . . 3.11.2 Die Features des Visual Web Developer Editors . . . . . . . . . . . . . . . 3.11.3 Code erstellen mit IntelliSense-Unterstützung . . . . . . . . . . . . . . . 3.11.4 Der Codeausschnitt-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.5 Neue Features in der Version 2010 . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.6 Dokumentation von Programmcode . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formulardaten von Hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Versandmethode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 Formularfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Ausgabe aller Formularangaben . . . . . . . . . . . . . . . . . . . . . . . . . . . Grundlegendes zu HTML Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formularversand mit HTML Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Formular serverseitig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Versand ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3 Das Formular ausblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 152 156 162 166 169 169 170 176 Inhalt 4.4 4.5 4.6 4.7 5 178 178 180 181 181 183 184 187 189 194 196 Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 5.1 5.2 5.3 5.4 5.5 5.6 5.7 6 HTML Controls im Einsatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Textfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 Passwortfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 Mehrzeiliges Textfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.4 Checkbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.5 Radiobutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.6 Auswahlliste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.7 Komplettes Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Spezialfall File-Upload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Daten im Kopfabschnitt der Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Textausgabe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formularelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Textfelder (und Passwortfelder). . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Checkbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.3 Radiobutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.4 Auswahlliste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.5 Drop-down-Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.6 File-Uploads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.7 Schaltfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Control-Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Weitere Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Ein Kalender-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.2 Mehrseitige Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XHTML-Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Control-IDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 200 200 203 208 212 214 217 219 222 224 224 225 232 233 237 Formulare überprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 6.1 6.2 Worum geht es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validation Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Pflichtfelder: RequiredFieldValidator . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Eingaben im Intervall: RangeValidator . . . . . . . . . . . . . . . . . . . . . . 6.2.3 Werte vergleichen: CompareValidator . . . . . . . . . . . . . . . . . . . . . . . 6.2.4 Musterprüfung: RegularExpressionValidator . . . . . . . . . . . . . . . . . 6.2.5 Eigene Funktion: CustomValidator. . . . . . . . . . . . . . . . . . . . . . . . . . 240 243 243 246 248 252 259 9 Inhalt 6.3 6.4 6.5 6.6 7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 Vergleich der Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benutzersteuerelement definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wichtige Attribute der Control-Direktive . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inline-Code vs. Code Behind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benutzersteuerelement in einer Seite verwenden . . . . . . . . . . . . . . . . . . . . Eigenschaften und Methoden verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . Ereignisse verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7.1 Ereignisbehandlung per Handles-Schlüsselwort. . . . . . . . . . . . . . 7.7.2 Ereignisbehandlung per AddHandler-Anweisung . . . . . . . . . . . . . 7.7.3 Deklarative Ereignisbehandlung per Attribut . . . . . . . . . . . . . . . . . 7.7.4 Beispiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dynamisches Laden von Benutzersteuerelementen . . . . . . . . . . . . . . . . . . . Benutzerdefiniertes Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benutzerdefiniertes Steuerelement verwenden . . . . . . . . . . . . . . . . . . . . . . In benutzerdefinierten Steuerelementen auf Ereignisse reagieren . . . . . . . Eigenschaften und Methoden von benutzerdefinierten Steuerelementen . 7.12.1 Programmatischer Zugriff auf Eigenschaften und Methoden. . . . Erweitern von existierenden Steuerelementen . . . . . . . . . . . . . . . . . . . . . . . Attribute von benutzerdefinierten Steuerelementen . . . . . . . . . . . . . . . . . . . 7.14.1 Attribute auf Klassenebene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.14.2 Attribute auf Eigenschaftsebene . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.14.3 Weitere Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 281 281 283 285 289 292 292 293 293 294 297 300 301 303 307 309 310 313 314 315 317 318 Seitenvorlagen und Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 8.1 10 265 265 270 271 274 276 276 277 278 Benutzer- und benutzerdefinierte Steuerelemente. . . . . . . . . . . . . . . . . . . . . . . . . 279 7.1 7.2 7.3 7.4 7.5 7.6 7.7 8 Fehlermeldungen ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.1 Validierungsergebnis: ValidationSummary . . . . . . . . . . . . . . . . . . . 6.3.2 Dynamische Anzeige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.3 Layout der Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formulare teilweise validieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formular-Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1 Formular versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.2 Überprüfung abbrechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seitenvorlage definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 8.1.1 Eine abgeleitete Seite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 8.1.2 Attribute der Master-Direktive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Inhalt 8.2 8.3 9 8.1.3 Standardinhalte definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.4 Titel der Seite festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.5 Zentrale Funktionen in der Seitenvorlage. . . . . . . . . . . . . . . . . . . . 8.1.6 Explizite Umwandlung des Vorlagentyps . . . . . . . . . . . . . . . . . . . . 8.1.7 Verwenden der MasterType-Direktive . . . . . . . . . . . . . . . . . . . . . . . 8.1.8 Zugriff auf Eigenschaften und Methoden der Seitenvorlage . . . . . 8.1.9 Seitenvorlage deklarativ vererben/schachteln . . . . . . . . . . . . . . . . 8.1.10 Seitenvorlage programmatisch vererben . . . . . . . . . . . . . . . . . . . . 8.1.11 Seitenvorlage dynamisch laden . . . . . . . . . . . . . . . . . . . . . . . . . . . . Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Design definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.2 Syntax für Designs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.3 Designs und Bilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.4 Zu verwendendes Design zentral festlegen . . . . . . . . . . . . . . . . . . 8.2.5 Zu verwendendes Design programmatisch festlegen . . . . . . . . . . 8.2.6 Verhindern, dass Designs zugewiesen werden. . . . . . . . . . . . . . . . 8.2.7 Designeinstellungen nur auf Stylesheet-Ebene übernehmen . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 331 332 334 335 335 336 339 342 345 345 347 349 350 351 354 354 354 Authentifizierung, Autorisierung und Anmeldung . . . . . . . . . . . . . . . . . . . . . . . . . . 355 9.1 9.2 9.3 9.4 9.5 9.6 9.7 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einrichten der Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Konfiguration des Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Konfiguration einer Webapplikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verwendung des Sicherheits-Setup-Assistenten . . . . . . . . . . . . . . . . . . . . . Konfiguration ohne Assistenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.1 Benutzer erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.2 Benutzer verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.3 Benutzer löschen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.4 Rollenmitgliedschaften von Benutzern bearbeiten . . . . . . . . . . . . 9.6.5 Authentifizierungstyp auswählen. . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.6 Rollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.7 Neue Rolle erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.8 Rollen verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6.9 Zugriffsregeln definieren oder verwalten . . . . . . . . . . . . . . . . . . . . Authentifizierung manuell konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.7.1 Festlegen des Authentifizierungsmodus . . . . . . . . . . . . . . . . . . . . . 9.7.2 Hinterlegen von Benutzern in der web.config. . . . . . . . . . . . . . . . . 9.7.3 Schutz von Verzeichnissen deklarieren . . . . . . . . . . . . . . . . . . . . . . 9.7.4 Unterverzeichnis schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.7.5 Einzelne Dateien formularbasiert schützen . . . . . . . . . . . . . . . . . . 355 356 359 360 362 367 367 368 370 370 371 372 372 373 373 375 375 376 377 378 378 11 Inhalt 9.8 9.9 9.10 9.11 9.12 9.13 9.14 9.15 9.16 9.17 9.18 Windows-basierte Authentifizierung (IIS-Authentifizierung) konfigurieren 9.8.1 Standardauthentifizierung: einfache Absicherung aller Elemente einer Applikation (vor IIS 7) . . . . . . . . . . . . . . . . . . . . . . . 9.8.2 Standardauthentifizierung: einfache Absicherung aller Elemente einer Applikation (Windows Server 2008) . . . . . . . . . . . 9.8.3 Standardauthentifizierung: Einfache Absicherung aller Elemente einer Applikation (Windows Vista, Windows 7) . . . . . . . 9.8.4 Standardauthentifizierung für IIS 7 und höher konfigurieren . . . . 9.8.5 Windows-Authentifizierung für .NET konfigurieren . . . . . . . . . . . . Membership-Provider konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Login-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.10.1 Wichtige Eigenschaften des Login-Steuerelements . . . . . . . . . . . Anmeldung über Membership-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dauerhafte Anmeldung realisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.12.1 Länge der dauerhaften Anmeldung konfigurieren . . . . . . . . . . . . . Registrierung von Benutzern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PasswordRecovery-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Den Namen des angemeldeten Users ausgeben. . . . . . . . . . . . . . . . . . . . . . 9.15.1 Verwenden von Membership.GetUser() . . . . . . . . . . . . . . . . . . . . . . 9.15.2 Verwenden des LoginName-Steuerelements . . . . . . . . . . . . . . . . . LoginStatus: in Abhängigkeit vom Anmeldestatus arbeiten . . . . . . . . . . . . . LoginView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 380 380 381 382 384 384 387 389 391 394 394 395 398 401 402 403 404 405 406 10 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 10.1 10.2 10.3 10.4 10.5 12 Hinterlegen von Navigationsstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.1 SiteMapProvider konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.2 Aufbau der web.sitemap-Datei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.3 Verteilen der Navigationsstruktur auf mehrere Dateien . . . . . . . . Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Ausnahmen für bestimmte Gruppen definieren . . . . . . . . . . . . . . . Unterschiedliche Anbieter verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programmatischer Zugriff auf Navigationsstrukturen . . . . . . . . . . . . . . . . . 10.4.1 Alle Knoten ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.2 Pfad zum aktuellen Element ausgeben. . . . . . . . . . . . . . . . . . . . . . SiteMapDataSource-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5.1 Verwenden des SiteMapDataSource-Steuerelements . . . . . . . . . . 10.5.2 Filtern von Elementen des SiteMapDataSource-Steuerelements 407 408 409 411 413 415 416 417 417 422 425 425 425 Inhalt 10.6 10.7 10.8 10.9 Menu-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6.1 Verwenden des Menu-Steuerelements . . . . . . . . . . . . . . . . . . . . . . 10.6.2 Ausgabemodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6.3 Darstellungsarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6.4 Navigationen kombinieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6.5 Navigationspunkte fest definieren . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6.6 Schriften, Farben und Stile anpassen . . . . . . . . . . . . . . . . . . . . . . . TreeView-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7.1 Statische Knoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7.2 TreeView programmatisch befüllen . . . . . . . . . . . . . . . . . . . . . . . . . 10.7.3 Dynamische und statische Knoten kombinieren . . . . . . . . . . . . . . 10.7.4 Knoten bei Bedarf laden und anzeigen lassen . . . . . . . . . . . . . . . . 10.7.5 TreeView und Client Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7.6 Informationen per PostBack übermitteln . . . . . . . . . . . . . . . . . . . . 10.7.7 Schriften, Farben und Stile anpassen . . . . . . . . . . . . . . . . . . . . . . . SiteMapPath-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8.1 Verwenden des SiteMapPath-Steuerelements . . . . . . . . . . . . . . . . 10.8.2 Richtung der Darstellung ändern . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8.3 Trennzeichen festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8.4 Festlegen, wie viele übergeordnete Knoten angezeigt werden . . . 10.8.5 Aktuelles Element als Link darstellen. . . . . . . . . . . . . . . . . . . . . . . 10.8.6 Schriften, Farben und Stile anpassen . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 428 431 431 436 438 440 442 442 444 446 448 451 451 454 455 455 456 457 457 458 458 460 11 Datenhaltung mit Cookies und Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 11.1 11.2 11.3 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.1 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.2 Arbeiten mit Cookies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.3 Mehrere Informationen in einem Cookie. . . . . . . . . . . . . . . . . . . . . 11.1.4 Cookie-Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sessions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1 Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.2 Mit einer Session arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Profile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.1 Profile anlegen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.2 Profile auslesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.3 Anonyme Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 462 465 472 478 482 482 486 496 496 498 500 13 Inhalt 12 Datei-Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 12.1 12.2 12.3 12.4 Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dateizugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.1 Textdatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.2 Binärdatei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.3 Schwarzes Brett . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datei- und Verzeichnisinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Dateiinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.2 Verzeichnisinformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.3 Verzeichnisbrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Weitere Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 506 506 521 524 532 532 534 536 540 13 Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 13.1 13.2 13.3 13.4 E-Mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.1 Einfache E-Mail versenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.2 Konfiguration der E-Mail-Einstellungen . . . . . . . . . . . . . . . . . . . . . 13.1.3 Konfiguration per web.config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.4 HTML-E-Mail versenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.5 Anhänge versenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.6 Umlaute übertragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.7 Kopien und Blindkopien versenden . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.8 Priorität einer E-Mail bestimmen . . . . . . . . . . . . . . . . . . . . . . . . . . Webseiten abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1 Binäre Inhalte abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.2 Daten übertragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.3 Cookies übertragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.4 Cookies abrufen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FTP-Daten übertragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.1 Inhalte abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.2 Inhalte senden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 546 550 551 553 556 559 560 561 561 563 564 570 571 571 572 575 577 14 Einführung in ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 14.1 14.2 14 Was ist ADO.NET? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.1 Der Weg zu ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.2 Die ADO.NET-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SQL – eine Kurzeinführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 580 581 587 Inhalt 14.3 14.4 14.5 14.6 14.7 14.8 14.9 Viele Wege führen zum Ziel – Hallo Welt aus der Datenbank . . . . . . . . . . . . 14.3.1 Vorbereitungen: Datenbank, Tabelle und Inhalt erstellen . . . . . . . 14.3.2 Daten aus einer Datenbank auslesen mittels Drag&Drop. . . . . . . 14.3.3 Daten aus einer Datenbank mit eigenem Code auslesen . . . . . . . Mit Datenquellen kommunizieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.1 Der Verbindungsaufbau zu einer Datenbank . . . . . . . . . . . . . . . . . Einfaches Lesen und Schreiben von Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5.1 Der DataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5.2 Die Methode ExecuteScalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5.3 Daten ergänzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5.4 Einfache Ausgaben mit DataSet und DataAdapter . . . . . . . . . . . . . Gespeicherte Prozeduren ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transaktionen mit ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das DataSet-Objekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8.1 DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8.2 DataView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8.3 Constraints und Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8.4 Das DataSet-Objekt in der Entwicklungsumgebung . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 594 598 600 603 605 610 610 612 614 617 621 628 631 632 636 640 643 647 15 Daten-Controls in ASP.NET 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 15.1 15.2 15.3 15.4 15.5 DataSource-Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das GridView-Control näher betrachtet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.1 Datensätze im GridView auswählen. . . . . . . . . . . . . . . . . . . . . . . . . 15.2.2 Die Sortierung über das GridView-Control steuern . . . . . . . . . . . . 15.2.3 Seitenwechsel in das GridView einführen . . . . . . . . . . . . . . . . . . . . 15.2.4 Datensätze im GridView verändern . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.5 Formatvorlagen im GridView-Control . . . . . . . . . . . . . . . . . . . . . . . Das DetailsView- und FormView-Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.1 Das DetailsView-Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.2 Das FormView-Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das ListView-, DataPager- und ChartControl . . . . . . . . . . . . . . . . . . . . . . . . 15.4.1 Grundlagen des ListView-Controls . . . . . . . . . . . . . . . . . . . . . . . . . 15.4.2 Gruppierungen im ListView-Control nutzen . . . . . . . . . . . . . . . . . . 15.4.3 Seitenwechsel mithilfe des DataPager-Controls einfügen . . . . . . 15.4.4 Datensätze im ListView-Control verändern . . . . . . . . . . . . . . . . . . 15.4.5 Chart Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 654 658 662 663 665 667 676 677 678 680 680 683 686 692 697 700 15 Inhalt 16 LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703 16.1 16.2 16.3 16.4 16.5 16.6 16.7 Was ist LINQ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LINQ to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2.1 Erweiterungsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2.2 Standard-Query-Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2.3 Beispielanwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LINQ to ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.1 LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.2 DataContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.3 LINQ to SQL-Klassendesigner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.4 Datenbindung mittels Designerklassen . . . . . . . . . . . . . . . . . . . . . 16.3.5 Datenbindung mittels LinqDataSource . . . . . . . . . . . . . . . . . . . . . . LINQ to XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LINQ to Entities – Entity Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . QueryExtender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 705 705 706 707 711 711 711 712 718 720 723 726 736 737 17 Dynamic Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 17.1 17.2 17.3 17.4 Vorteile von Dynamic Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aktivieren von Dynamic Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verwenden der Websitevorlage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.1 Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.2 Datenauswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.3 Die Rolle der Global.asax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.4 Validierung von Feldinhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.5 Anpassen der Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 740 742 743 743 743 745 746 751 18 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 18.1 18.2 16 XML-Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.1 Regeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.2 Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.3 DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.4 Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1.5 Datenzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XML in .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.2.1 XmlReader zum Lesen und Schreiben . . . . . . . . . . . . . . . . . . . . . . 18.2.2 DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 755 758 760 762 763 765 765 782 Inhalt 18.3 Fortgeschrittene Technologien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.1 DataSets und XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.2 XmlDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.3 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.4 XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 793 804 806 811 19 WCF- und Webdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819 19.1 19.2 19.3 19.4 SOAP, WSDL und UDDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.1.1 Aufbau einer SOAP-Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.1.2 Datenidentität vs. Objektidentität. . . . . . . . . . . . . . . . . . . . . . . . . . . 19.1.3 WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WCF-Dienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.1 Definition eines WCF-Dienstes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.2 Einbinden eines WCF-Dienstes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.3 Konfiguration von WCF-Dienste-Clients . . . . . . . . . . . . . . . . . . . . . 19.2.4 Definition von komplexen Datentypen . . . . . . . . . . . . . . . . . . . . . . . 19.2.5 Einweg-WCF-Dienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.6 Asynchrone Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.7 Authentifizierung und Autorisierung in WCF-Diensten . . . . . . . . . ASP.NET-Webdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.1 Bereitstellen eines ASP.NET-Webdienstes . . . . . . . . . . . . . . . . . . . 19.3.2 ASP.NET-Webdienst konsumieren . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.3 Adresse eines Webdienstes ändern . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.4 Einweg-Methoden mit ASP.NET-Webdiensten . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819 820 820 821 821 822 824 827 834 840 843 848 858 858 863 866 866 869 20 Grafiken on the fly. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871 20.1 20.2 20.3 20.4 20.5 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.1.1 Exkurs: Dateiformate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Farbe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transparenz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.4.1 Einfache Formen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.4.2 Andere Formen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pinsel und Stift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.5.1 Pinsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.5.2 Musterpinsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.5.3 Verläufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.5.4 Stift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872 874 877 880 882 882 883 888 888 891 892 897 17 Inhalt 20.6 20.7 20.8 Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904 Antialiasing und weitere Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906 Eine Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 21 Mobile Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915 21.1 21.2 21.3 21.4 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.1 Stapel und Karten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.2 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.3 Verlinkung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.4 Grafiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.5 Formulare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2.6 ASP.NET Mobile Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mobile Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.2 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.3 Grafiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.4 Textfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.5 Radiobuttons und Checkboxen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.6 Validation Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.7 Weitere Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3.8 Gerätespezifische Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916 917 918 918 919 920 922 926 927 927 929 931 932 935 938 938 939 941 22 Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943 22.1 22.2 22.3 22.4 18 Nachteile und offene Punkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ASP.NET AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2.1 Grundlegende Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2.2 Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2.3 Fortschrittsanzeige – UpdateProgress . . . . . . . . . . . . . . . . . . . . . . 22.2.4 Clientseitige Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2.5 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2.6 ASP.NET AJAX Control Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . jQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.3.1 Einbau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.3.2 Ajax-Aufruf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944 945 946 949 949 950 954 961 965 966 968 970 Inhalt 23 Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971 23.1 23.2 23.3 23.4 Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.1.1 Silverlight Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.1.2 Silverlight SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.1.3 Silverlight beim Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.1.4 Microsoft Expression Blend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loslegen mit Silverlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2.1 Vorbereitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2.2 XAML-Oberfläche definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2.3 Silverlight starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2.4 Verschiedene Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2.5 Auf Ereignisse reagieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anwendungen installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972 972 972 973 973 973 973 975 977 977 979 982 985 24 Lokalisierung und Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987 24.1 24.2 24.3 24.4 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988 24.1.1 Sprachen und Kulturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988 24.1.2 Kulturspezifische Ressourcen und Standardressourcen. . . . . . . . 989 24.1.3 Auflösung, welche Ressource verwendet werden muss . . . . . . . . 989 24.1.4 Definition von lokalen Ressourcen. . . . . . . . . . . . . . . . . . . . . . . . . . 990 24.1.5 Definition von globalen Ressourcen. . . . . . . . . . . . . . . . . . . . . . . . . 991 Zugriff auf Werte einer Ressource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 24.2.1 Das Localize-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993 24.2.2 Deklarativer Zugriff auf Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . 994 24.2.3 Programmatischer Zugriff auf lokale Ressource . . . . . . . . . . . . . . 997 24.2.4 Programmatischer Zugriff auf globale Ressource: GetGlobalResourceObject(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998 24.2.5 Programmatischer Zugriff auf globale Ressource: typisierte Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999 Lokalisierung aktivieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 24.3.1 Deklaratives Festlegen in der web.config . . . . . . . . . . . . . . . . . . . . 1001 24.3.2 Deklaratives Festlegen in einer Seite . . . . . . . . . . . . . . . . . . . . . . . 1002 24.3.3 Programmatisches Festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002 24.3.4 Auswirkungen der Sprach- und Kultureinstellungen . . . . . . . . . . 1003 24.3.5 Sprache durch den Benutzer einstellen lassen . . . . . . . . . . . . . . . 1009 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012 19 Inhalt 25 Serialisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013 25.1 25.2 25.3 Binär . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018 25.2.1 Serialisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018 25.2.2 Attribute zur Serialisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021 25.2.3 Deserialisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023 SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025 26 Web Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031 26.1 26.2 26.3 Web-Part-Modi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032 26.1.1 WebPartManager und Zonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032 26.1.2 Zonenlayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033 26.1.3 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038 WebPartDisplayMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040 26.2.1 WebPartDisplayMode auslesen und ändern . . . . . . . . . . . . . . . . . . 1040 26.2.2 Katalogzonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046 26.2.3 Weitere DisplayModes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051 27 ASP.NET MVC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053 27.1 27.2 27.3 27.4 27.5 20 MVC-Ansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053 Einfache ASP.NET-MVC-Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055 27.2.1 Controller definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057 27.2.2 Anlegen einer Ansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059 27.2.3 Routen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061 27.2.4 Daten an Anzeigen übergeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062 27.2.5 Parameter entgegennehmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066 27.2.6 Objekte als Parameter verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . 1070 27.2.7 Nur POST- oder GET-Requests zulassen . . . . . . . . . . . . . . . . . . . . 1072 27.2.8 Auf eine andere Aktion weiterleiten. . . . . . . . . . . . . . . . . . . . . . . . . 1072 27.2.9 Andere Anzeige zur Darstellung nutzen . . . . . . . . . . . . . . . . . . . . . 1073 Daten validieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074 27.3.1 Validieren von Eingaben per ModelState-Dictionary . . . . . . . . . . . 1074 27.3.2 Validieren von Eingaben per Attribut . . . . . . . . . . . . . . . . . . . . . . . . 1078 Formularbasierte Authentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086 Inhalt 28 Performance und Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087 28.1 28.2 28.3 28.4 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088 28.1.1 Was ist Caching? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088 28.1.2 Output-Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091 28.1.3 Caching mit Parametern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092 28.1.4 Caching für jeden Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093 28.1.5 Caching je nach Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095 28.1.6 Fragmentelles Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096 28.1.7 Caching im Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098 Variablen im Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098 28.2.1 Zugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099 28.2.2 Lebensdauer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100 28.2.3 Abhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101 28.2.4 Variablen entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103 Mehr Caching-Möglichkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103 28.3.1 Aktionen nach dem Cachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103 28.3.2 SQL-Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109 29 Fehlersuche und Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111 29.1 29.2 29.3 29.4 29.5 29.6 29.7 Fehlertypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112 Compilerausgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116 Debug-Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117 Trace-Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119 29.4.1 Trace-Informationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120 29.4.2 Eigene Ausgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123 Auf Fehler reagieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124 Der Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126 Tipps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132 30 Web-Hacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133 30.1 30.2 30.3 30.4 30.5 Benutzereingaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135 XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 SQL Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142 Versteckte Felder? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1147 21 Inhalt 31 Konfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149 31.1 31.2 31.3 31.4 31.5 31.6 Konfigurationsdateien im Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150 Der Aufbau der Konfigurationsdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150 .NET-Konfigurationsdateien und .ini-Dateien im Vergleich . . . . . . . . . . . . . 1151 Die unterschiedlichen Bereiche der Konfigurationsdateien im Detail. . . . . 1152 Der Einsatz von konfigurierbaren Eigenschaften . . . . . . . . . . . . . . . . . . . . . 1170 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173 Bonuskapitel auf der DVD A Neuerungen in Visual Studio 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201 A.1 A.2 A.3 A.4 A.5 B Migration von Visual Basic nach C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213 B.1 B.2 22 Multi-Targeting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201 Ansichten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204 CSS-Unterstützung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204 IntelliSense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211 Wesentliche Sprachunterschiede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213 B.1.1 Anweisungstrenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214 B.1.2 Blöcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215 B.1.3 Verzweigungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216 B.1.4 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217 B.1.5 Variablendeklaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218 B.1.6 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220 B.1.7 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221 B.1.8 Funktionen und Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222 B.1.9 By Value und By Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224 B.1.10 Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225 B.1.11 Klassen und Namensräume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227 B.1.12 Modifizierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230 B.1.13 Typkonvertierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230 B.1.14 Importieren von Typen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232 B.1.15 Erweiterungsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1233 B.2.1 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238 Inhalt C Referenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239 C.1 C.2 D Quellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309 D.1 D.2 D.3 E HTML Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239 C.1.1 Übergeordnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1240 C.1.2 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1240 C.1.3 Formulare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245 Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250 C.2.1 Übergeordnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250 C.2.2 Web Form Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1251 C.2.3 Komplexere Formularausgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264 C.2.4 Navigations-Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268 C.2.5 Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274 C.2.6 Anmeldungs-Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275 C.2.7 Controls zur Datenausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291 C.2.8 Validierungs-Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1300 C.2.9 Sonstige Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304 Die mitgelieferten Hilfen im .NET Framework. . . . . . . . . . . . . . . . . . . . . . . . 1309 Microsofts Netzwerk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310 Community-Websites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313 Alternative Programmiersprachen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315 E.1 E.2 E.3 E.4 E.5 E.6 E.7 Das Beispiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316 JScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319 COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321 Perl, Python und Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325 23