■KAPITEL 10 Rich Data Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Die GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Spalten definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Formatieren der GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Felder formatieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Stile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Formatierungsspezifische Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
GridView-Zeilenauswahl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Verwenden der Auswahl zum Erstellen eines Master-Details-Formulars. . . . . . . . . . . . . . . . . . . . 398
Das SelectedIndexChanged-Ereignis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Ein Datenfeld als Auswahlschaltfläche verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Sortieren der GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Sortieren mit der SqlDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Sortieren mit der ObjectDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Sortieren und Auswählen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Erweiterte Sortierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
xiv ■INHALT
Paging der GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Automatisches Paging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Benutzerdefinierte Paginierung mit der ObjectDataSource. . . . . . . . . . . . . . . . . . . . . . 408
Anpassen der Pager-Leiste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
GridView-Vorlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Verwendung mehrerer Vorlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Bearbeiten von Vorlagen in Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Bindung an eine Methode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Behandeln von Ereignissen in einer Vorlage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Bearbeiten mit einer Vorlage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Die ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Gruppierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Paging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Die DetailsView und FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Die DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Die FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Erweiterte Raster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Zusammenfassungen im GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Eine übergeordnete/untergeordnete Ansicht in einer einzelnen Tabelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Bearbeiten eines Feldes mithilfe einer Nachschlagetabelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Bereitstellen von Bildern aus einer Datenbank. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Parallelitätskonflikte erkennen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
■KAPITEL 11 Caching und asynchrone Seiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Grundlegendes zum ASP.NET-Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Ausgabe-Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Deklaratives Ausgabe-Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Caching und die Abfragezeichenfolge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Caching mit spezifischen Abfragezeichenfolgenparametern. . . . . . . . . . . . . . . . . . . . . 454
Benutzerdefinierte Caching-Steuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Caching mit der HttpCachePolicy-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Post-Cache-Ersetzung und Fragment-Caching. . . . . . . . . . . . . . . . . . . . 457
Cache-Profile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Cache-Konfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Daten-Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Elemente zum Cache hinzufügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Ein einfacher Cache-Test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Cache-Prioritäten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Caching mit den Data Source Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Cache-Abhängigkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Datei- und Cache-Elementabhängigkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Aggregierte Abhängigkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
■INHALT xv
Der Rückruf „Artikel entfernt“. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Grundlegendes zu SQL-Cache-Benachrichtigungen. . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Cache-Benachrichtigungen in SQL Server 2000 und SQL Server 7. . . . . . . . . . . . 474
Cache-Benachrichtigungen in SQL Server 2005 und SQL Server 2008. . . . . . . . 479
Benutzerdefinierte Cache-Abhängigkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Eine grundlegende benutzerdefinierte Cache-Abhängigkeit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Eine benutzerdefinierte Cache-Abhängigkeit mithilfe von Nachrichtenwarteschlangen. . . . . . . . . . . . . . . 483
Asynchrone Seiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Erstellen einer asynchronen Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Abfragen von Daten auf einer asynchronen Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . 488
Umgang mit Fehlern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Verwenden von Caching mit asynchronen Aufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . 492
Mehrere asynchrone Aufgaben und Zeitüberschreitungen. . . . . . . . . . . . . . . . . . . . . . . . 495
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
■KAPITEL 12 Dateien und Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Arbeiten mit dem Dateisystem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Die Verzeichnis- und Dateiklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Die Klassen DirectoryInfo und FileInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Die DriveInfo-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Arbeiten mit Attributen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Filtern Sie Dateien mit Platzhaltern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Informationen zur Dateiversion abrufen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Die Path-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Ein Dateibrowser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Dateien mit Streams lesen und schreiben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Textdateien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Binärdateien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Hochladen von Dateien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Dateien für mehrere Benutzer sicher machen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Komprimierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Serialisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
■KAPITEL 13 LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
LINQ-Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Aufgeschobene Ausführung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
So funktioniert LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
LINQ-Ausdrücke. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
LINQ-Ausdrücke „Unter der Haube“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
LINQ to DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Typisierte Datensätze. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Nullwerte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
xvi ■INHALT
LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Datenentitätsklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Der DataContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
LINQ to SQL-Abfragen „unter der Haube“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
LINQ to SQL und Datenbankkomponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Auswählen eines einzelnen Datensatzes oder Werts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Datenklassen automatisch generieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Beziehungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Generieren von Methoden für gespeicherte Prozeduren. . . . . . . . . . . . . . . . . . . . . . . . . 571
Änderungen übernehmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Die LinqDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Daten anzeigen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Zugehörige Daten abrufen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Daten bearbeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Validierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
■KAPITEL 14 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Wann ist der Einsatz von XML sinnvoll? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Eine Einführung in XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Die Vorteile von XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Wohlgeformtes XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
XML-Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
XML-Schemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Stream-basierte XML-Verarbeitung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
XML-Dateien schreiben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
XML-Dateien lesen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
In-Memory-XML-Verarbeitung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Das XmlDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Der XPathNavigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Das XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Durchsuchen von XML-Inhalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Suche mit XmlDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
XmlDocument mit XPath durchsuchen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
XDocument mit LINQ durchsuchen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Validieren von XML-Inhalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Ein grundlegendes Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Validierung mit XmlDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Validierung mit XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Transformieren von XML-Inhalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Ein einfaches Stylesheet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Verwenden von XslCompiledTransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
■INHALT xvii
Verwenden des XML-Steuerelements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
XML mit LINQ in XML umwandeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
XML-Datenbindung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Nichthierarchische Bindung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Verwenden von XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Verschachtelte Gitter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Hierarchische Bindung mit der TreeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Verwendung von XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Bindung an XML-Inhalte aus anderen Quellen. . . . . . . . . . . . . . . . . . . . . . . . 637
Aktualisieren von XML über die XmlDataSource . . . . . . . . . . . . . . . . . . . . . . . . 637
XML und das ADO.NET DataSet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Konvertieren des DataSet in XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Auf ein DataSet als XML zugreifen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
TEIL 3 ■ ■ ■ Erstellen von ASP.NET-Websites
■KAPITEL 15 Benutzerkontrollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Grundlagen der Benutzerkontrolle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Erstellen einer einfachen Benutzersteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Konvertieren einer Seite in ein Benutzersteuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Code zu einem Benutzersteuerelement hinzufügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Umgang mit Ereignissen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Eigenschaften hinzufügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Benutzerdefinierte Objekte verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Ereignisse hinzufügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
Offenlegen der Inner Web Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Dynamisches Laden von Benutzersteuerelementen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Portal-Frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Teilweises Seiten-Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
VaryByControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Zwischengespeicherte Steuerelemente teilen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
■KAPITEL 16 Themen und Masterseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Kaskadierende Stylesheets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Erstellen eines Stylesheets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Anwenden von Stylesheet-Regeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
xviii ■INHALT
Themen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Themenordner und Skins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Anwenden eines einfachen Themas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Umgang mit Themenkonflikten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Erstellen mehrerer Skins für dasselbe Steuerelement. . . . . . . . . . . . . . . . . . . . . . . 674
Skins mit Vorlagen und Bildern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
CSS in einem Theme verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
Anwenden von Designs über eine Konfigurationsdatei. . . . . . . . . . . . . . . . . . . . . 677
Dynamisches Anwenden von Designs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Standardisierung des Website-Layouts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Masterseiten-Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Eine einfache Masterseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
Eine einfache Inhaltsseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Standardinhalt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
Masterseiten mit Tabellen und CSS-Layout. . . . . . . . . . . . . . . . . . . . . . . . . 685
Masterseiten und relative Pfade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
Anwenden von Masterseiten über eine Konfigurationsdatei. . . . . . . . . . . . . . . . . 688
Erweiterte Masterseiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Interaktion mit der Master Page-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Dynamisches Festlegen einer Masterseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Verschachtelung von Masterseiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
■KAPITEL 17 Website-Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Seiten mit mehreren Ansichten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Das MultiView-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Die Assistentensteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
Sitemaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Definieren einer Sitemap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
Bindung an eine Sitemap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Semmelbrösel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Zeigt einen Teil der Sitemap an. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Die Sitemap-Objekte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Hinzufügen benutzerdefinierter Sitemap-Informationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Erstellen eines benutzerdefinierten SiteMapProviders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
URL-Zuordnung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Sicherheitsbeschneidung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
Das TreeView-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
Der TreeNode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Bestücken von Knoten nach Bedarf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
TreeView-Stile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
■INHALT xix
Die Menüsteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Menüstile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
Menüvorlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
■KAPITEL 18 Website-Bereitstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Internetinformationsdienste (IIS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
IIS-Websites und virtuelle Verzeichnisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
IIS-Verwaltungskonsole und IIS-Konfiguration. . . . . . . . . . . . . . . . . . . . . 747
Zuordnen von Websites, virtuellen Verzeichnissen und Dateien zu URLs. . . . . . . . . . . . . 748
Eintauchen in die Architektur von IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
IIS installieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Verwalten von Websites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
Verwalten virtueller Verzeichnisse und Websites mit IIS 5.x und IIS 6.0. . . . . . . 772
Verwalten von Anwendungspools in IIS 6.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
Verwalten virtueller Verzeichnisse und Websites mit IIS 7.0. . . . . . . . . . . . . . . 784
Verwalten von Anwendungspools in IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
Bereitstellen Ihrer ASP.NET-Anwendungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
Überprüfen der ASP.NET-Installation auf IIS 5.x und IIS 6.0. . . . . . . . . . . . . . 800
ASP.NET-Side-by-Side-Ausführung auf IIS 5.x und IIS 6.0. . . . . . . . . . . . . . . 801
ASP.NET-Side-by-Side-Ausführung auf IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . 803
Konfigurieren von HTTP-Laufzeiteinstellungen bei der Bereitstellung auf IIS 5.x. . . . . . . . 803
Kompilierungsmodelle in ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
Bereitstellen mit Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Visual Studio 2005-Webbereitstellungsprojekte. . . . . . . . . . . . . . . . . . . . . . 809
Der VirtualPathProvider in ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Gesundheitsüberwachung in ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
Die Grundstruktur verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Veranstaltungen und Anbieter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
TEIL 4 ■ ■ ■ Sicherheit
■KAPITEL 19 Das ASP.NET-Sicherheitsmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Was es bedeutet, sichere Software zu erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Potenzielle Bedrohungen verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Richtlinien zur sicheren Codierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Gatekeeper verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Die Sicherheitsstufen verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Autorisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
xx ■INHALT
Vertraulichkeit und Integrität. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Alles zusammenfügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Sicherheit von Internetinformationsdiensten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
Authentifizierung und Autorisierung auf IIS 5.x und IIS 6.0. . . . . . . . . . . . . . . 835
Sicherheitskonfiguration auf IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Grundlegendes zur Secure Sockets-Schicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
ASP.NET-Sicherheitsarchitektur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Autorisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
Der Sicherheitskontext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
Mitgliedschafts- und Rollen-APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
■KAPITEL 20 Formularauthentifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Einführung der Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Warum Formularauthentifizierung verwenden? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
Warum sollten Sie die Formularauthentifizierung nicht verwenden? . . . . . . . . . . . . . . . . . . . . 862
Warum implementieren Sie die Cookie-Authentifizierung nicht selbst? . . . . . . . . . . . . . . . . 863
Die Formularauthentifizierungsklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
Implementieren der Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Konfigurieren der Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Anonymen Benutzern den Zugriff verweigern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Erstellen einer benutzerdefinierten Anmeldeseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Benutzerdefinierter Anmeldeinformationsspeicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Permanente Cookies in der Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . 877
IIS 7.0 und Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
■KAPITEL 21 Mitgliedschaft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Einführung in die ASP.NET-Mitgliedschafts-API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Verwenden der Mitgliedschafts-API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Konfigurieren der Formularauthentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
Erstellen des Datenspeichers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
Verbindungszeichenfolge und Mitgliedschaftsanbieter konfigurieren. . . . . . . . . . . . . 896
Benutzer erstellen und authentifizieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
Verwenden der Sicherheitskontrollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
Die Login-Steuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
Das LoginStatus-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Das LoginView-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
Das PasswordRecovery-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
Das ChangePassword-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
Das CreateUserWizard-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
■INHALT xxi
Konfigurieren der Mitgliedschaft in IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Konfigurieren von Anbietern und Benutzern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Verwenden der Mitgliedschafts-API mit anderen Anwendungen. . . . . . . . . . . . . . . . . . 928
Verwendung der Mitgliedschaftsklasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Abrufen von Benutzern aus dem Store. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Aktualisieren von Benutzern im Store. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Benutzer anlegen und löschen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Benutzer validieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Verwenden der Mitgliedschaft in Windows Forms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
■KAPITEL 22 Windows-Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Einführung in die Windows-Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Warum Windows-Authentifizierung verwenden? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Warum sollten Sie die Windows-Authentifizierung nicht verwenden? . . . . . . . . . . . . . . . . . . 941
Mechanismen zur Windows-Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . 942
Implementieren der Windows-Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Konfigurieren von IIS 5.x oder IIS 6.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
IIS 7.0 konfigurieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
Konfigurieren von ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
Anonymen Benutzern den Zugriff verweigern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Zugreifen auf Windows-Benutzerinformationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
Identitätswechsel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
Identitätswechsel in Windows 2000. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
Identitätswechsel unter Windows XP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
Identitätswechsel und Delegation unter Windows Server 2003. . . . . . . . . . . . . 964
Identitätswechsel unter Windows Vista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
Identitätswechsel und Delegation unter Windows Server 2008. . . . . . . . . . . . . 968
Konfigurierter Identitätswechsel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
Programmatischer Identitätswechsel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
■KAPITEL 23 Autorisierung und Rollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
URL-Autorisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Autorisierungsregeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
Dateiautorisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
Autorisierungsprüfungen im Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Verwenden der IsInRole()-Methode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Verwenden der PrincipalPermission-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
Verwenden der Rollen-API für die rollenbasierte Autorisierung. . . . . . . . . . . . . . . . . . . . . . . . 985
Verwenden des LoginView-Steuerelements mit Rollen. . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
Programmgesteuerter Zugriff auf Rollen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
Verwenden der Rollen-API mit Windows-Authentifizierung. . . . . . . . . . . . . . . . . . . 994
xxii ■INHALT
Schutz von Nicht-ASP.NET-Ressourcen in IIS 5 und 6. . . . . . . . . . . . . . . . . . . . . . . . 997
Hinzufügen einer Dateitypzuordnung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
Einen benutzerdefinierten HTTP-Handler schreiben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
Autorisierung und Rollen in IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
Autorisierung mit ASP.NET-Rollen in IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . 1002
Verwalten von ASP.NET-Rollen mit IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
■KAPITEL 24 Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Profile verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Profilleistung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Wie Profile Daten speichern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
Profile und Authentifizierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Profile vs. benutzerdefinierte Datenkomponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Verwenden des SqlProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Erstellen der Profiltabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Konfigurieren des Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
Profileigenschaften definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
Verwenden von Profileigenschaften. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
Profilserialisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Profilgruppen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
Profile und benutzerdefinierte Datentypen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
Die Profiles-API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
Anonyme Profile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
Benutzerdefinierte Profilanbieter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Die benutzerdefinierten Profilanbieterklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Entwerfen des FactoredProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
Codierung des FactoredProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
Testen des FactoredProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
■KAPITEL 25 Kryptographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
Daten verschlüsseln: Vertraulichkeit ist wichtig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
Der .NET-Kryptografie-Namespace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
Grundlegendes zu den .NET-Kryptografieklassen. . . . . . . . . . . . . . . . . . . . . . . . . . 1046
Symmetrische Verschlüsselungsalgorithmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
Asymmetrische Verschlüsselung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
Die abstrakten Verschlüsselungsklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
Die ICryptoTransform-Schnittstelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
Die CryptoStream-Klasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
■INHALT xxiii
Sensible Daten verschlüsseln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
Geheimnisse verwalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
Verwendung symmetrischer Algorithmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
Verwendung asymmetrischer Algorithmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
Sensible Daten in einer Datenbank verschlüsseln. . . . . . . . . . . . . . . . . . . . . . . . . . 1061
Verschlüsseln der Abfragezeichenfolge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
Umschließen der Abfragezeichenfolge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
Erstellen einer Testseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
■KAPITEL 26 Benutzerdefinierte Mitgliedschaftsanbieter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
Architektur benutzerdefinierter Anbieter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
Grundlegende Schritte zum Erstellen benutzerdefinierter Anbieter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Gesamtdesign des benutzerdefinierten Anbieters. . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Entwerfen und Implementieren des benutzerdefinierten Stores. . . . . . . . . . . . . . . . . . . . 1074
Implementieren der Provider-Klassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
Verwenden der benutzerdefinierten Anbieterklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
TEIL 5 ■ ■ ■ Erweiterte Benutzeroberfläche
■KAPITEL 27 Benutzerdefinierte Serversteuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Grundlagen der benutzerdefinierten Serversteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Erstellen eines einfachen benutzerdefinierten Steuerelements. . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
Verwenden eines benutzerdefinierten Steuerelements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
Benutzerdefinierte Steuerelemente in der Toolbox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
Erstellen eines Websteuerelements, das Stileigenschaften unterstützt. . . . . . . . . . . . . . 1114
Der Rendering-Prozess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
Umgang mit verschiedenen Browsern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
Der HtmlTextWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
Browsererkennung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
Browsereigenschaften. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122
Überschreiben der Browsertyperkennung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
Adaptives Rendering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
Kontrollstatus und Ereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Status anzeigen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Kontrollstatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129
Postback-Daten und Änderungsereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131
Auslösen eines Postbacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133
Vorhandene Web-Steuerelemente erweitern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
Zusammengesetzte Steuerelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
End SidebarAbgeleitete Steuerelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
xxiv ■INHALT
Vorlagensteuerelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Erstellen eines Vorlagensteuerelements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Benutzerdefinierte Vorlagen verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143
Stile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
■KAPITEL 28 Design-Time-Unterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
Die Hauptakteure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
Entwurfszeitattribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
Das Eigenschaftenfenster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
Attribute und Vererbung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157
Das Toolbox-Symbol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158
Webressourcen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Eine Ressource erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Abrufen einer Ressource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
Textersetzung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
Code-Serialisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
Typkonverter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
Serialisierungsattribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
Typ-Editoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
Steuerungsdesigner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
Design-Time-HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
Intelligente Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
■KAPITEL 29 Dynamische Grafiken und GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
Das ImageMap-Steuerelement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
Hotspots erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
Umgang mit Hotspot-Klicks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
Ein benutzerdefinierter Hotspot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
Zeichnen mit GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
Einfaches Zeichnen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
Bildformat und Qualität. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
Die Grafikklasse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
Verwenden eines GraphicsPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Stifte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
Pinsel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
Dynamische Grafiken in eine Webseite einbetten. . . . . . . . . . . . . . . . . . . . . . . . . . 1199
Verwendung des PNG-Formats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Weitergabe von Informationen an dynamische Bilder. . . . . . . . . . . . . . . . . . . . . . . . . . 1201
Benutzerdefinierte Steuerelemente, die GDI+ verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
Diagrammerstellung mit GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
■INHALT xxv
■KAPITEL 30 Portale mit Webpartseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
Typische Portalseiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
Grundlegende Webpartseiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
Erstellen des Seitendesigns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218
WebPartManager- und WebPartZone-Steuerelemente. . . . . . . . . . . . . . . . . . . . . . 1219
Hinzufügen von Webparts zur Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
Anpassen der Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
Erstellen von Webparts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
Einfache Webpart-Aufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227
Entwickeln erweiterter Webparts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235
Webpart-Editoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
Webparts verbinden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250
Benutzerdefinierte Verben und Webparts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258
Benutzersteuerelemente und erweiterte Webparts. . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
Dynamisches Hochladen von Webparts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262
Autorisieren von Webparts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
Letzte Aufgaben zur Personalisierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
TEIL 6 ■ ■ ■ Clientseitige Programmierung
■KAPITEL 31 JavaScript- und Ajax-Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
JavaScript-Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
Das HTML-Dokumentobjektmodell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274
Clientseitige Ereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275
Skriptblöcke. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277
Bearbeiten von HTML-Elementen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
JavaScript debuggen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280
Grundlegende JavaScript-Beispiele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
Erstellen eines JavaScript-Seitenprozessors. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
Verwenden von JavaScript zum asynchronen Herunterladen von Bildern. . . . . . . . . . . . . . 1285
Skriptblöcke rendern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
Script-Injection-Angriffe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
Validierung anfordern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
Anforderungsvalidierung deaktivieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
Benutzerdefinierte Steuerelemente mit JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
Popup-Fenster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
Rollover-Schaltflächen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
Rahmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
Frame-Navigation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302
Inline-Frames. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
xxvi ■INHALT
Ajax verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304
Das XMLHttpRequest-Objekt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
Ein Ajax-Beispiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
Verwenden von Ajax mit Client-Rückrufen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Erstellen eines Client-Rückrufs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Kundenrückrufe „unter der Haube“. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317
Client-Rückrufe in benutzerdefinierten Steuerelementen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
■KAPITEL 32 ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
Einführung in ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
ASP.NET AJAX auf dem Client: Die Skriptbibliotheken. . . . . . . . . . . . . . . . . . 1325
ASP.NET AJAX auf dem Server: Der ScriptManager . . . . . . . . . . . . . . . . . . 1325
Serverrückrufe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326
Webdienste in ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
Der Webdienst-Proxy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
Platzieren einer Webmethode in einer Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
ASP.NET AJAX-Anwendungsdienste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
ASP.NET AJAX-Serversteuerelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
Teilweises Rendern mit dem UpdatePanel. . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
Zeitgesteuerte Aktualisierungen mit dem Timer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
Zeitaufwändige Updates mit UpdateProgress. . . . . . . . . . . . . . . . . . . . 1352
Tieferer Einblick in die Client-Bibliotheken. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
Das Client-Modell verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
Objektorientierte Programmierung in JavaScript. . . . . . . . . . . . . . . . . . . . . . . 1357
Das Webseiten-Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
Kontroll-Extender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
Installieren des ASP.NET AJAX Control Toolkits. . . . . . . . . . . . . . . . . . . . . . . 1370
Der AutoCompleteExtender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
Das ASP.NET AJAX Control Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378
■KAPITEL 33 Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Silverlight verstehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Silverlight vs. Flash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
Silverlight-Einführung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Silverlight und WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Installieren von Silverlight und den Visual Studio-Erweiterungen. . . . . . . . . . . . . . . 1383
Erstellen eines Silverlight-Projekts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
Die HTML-Einstiegsseite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
Das Silverlight-Initialisierungsskript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
Die XAML-Seite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
Der XAML-Code-Behind. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
■INHALT xxvii
Eigenschaften und Ereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
Silverlight-Zusammenstellung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
Silverlight Essentials. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
.NET Framework-Klassen in Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . 1395
Die Leinwand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401
Interaktion mit HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
Isolierte Lagerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
Silverlight und ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
ASP.NET-Futures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
Kommunikation zwischen Silverlight und ASP.NET. . . . . . . . . . . . . . . . . . 1412
Zeichnen in 2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
Einfache Formen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413
Pfade und Geometrien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417
Pinsel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
Transparenz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
Animation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
Animationsgrundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
Eine Animation definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
Ein Beispiel für eine interaktive Animation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
Verwandelt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
Expandieren