■BAB 10 Kontrol Data Kaya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Tampilan Grid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Mendefinisikan Kolom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Memformat GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Memformat Bidang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Gaya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Nilai Khusus Pemformatan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Pemilihan Baris GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Menggunakan Seleksi untuk Membuat Formulir Detail Master. . . . . . . . . . . . . . . . . . . . 398
Acara SelectedIndexChanged . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Menggunakan Bidang Data Sebagai Tombol Pilih. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Menyortir GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Menyortir dengan SqlDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Menyortir dengan ObjectDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Penyortiran dan Seleksi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Penyortiran Tingkat Lanjut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
xiv ■ISI
Membuat halaman GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Halaman Otomatis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Paginasi Khusus dengan ObjectDataSource. . . . . . . . . . . . . . . . . . . . . . 408
Menyesuaikan Bilah Pager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Templat GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Menggunakan Banyak Template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Mengedit Templat di Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Mengikat ke Metode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Menangani Acara dalam Templat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Mengedit dengan Templat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Tampilan Daftar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Pengelompokan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
halaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
DetailsView dan FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Tampilan Detail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Tampilan Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Grid Tingkat Lanjut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Ringkasan di GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Tampilan Orang Tua/Anak dalam Satu Tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Mengedit Bidang Menggunakan Tabel Pencarian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Melayani Gambar dari Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Mendeteksi Konflik Konkurensi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
■BAB 11 Caching dan Halaman Asinkron . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Memahami Caching ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Caching Keluaran. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Caching Keluaran Deklaratif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Caching dan String Kueri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Caching dengan Parameter String Kueri Tertentu. . . . . . . . . . . . . . . . . . . . . 454
Kontrol Caching Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Caching dengan Kelas HttpCachePolicy. . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Substitusi Pasca-Cache dan Caching Fragmen. . . . . . . . . . . . . . . . . . . . 457
Profil Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Konfigurasi Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Penyimpanan Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Menambahkan Item ke Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Tes Cache Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Prioritas Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Caching dengan Kontrol Sumber Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Ketergantungan Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Ketergantungan File dan Item Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Ketergantungan Agregat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
■ISI xv
Item Dihapus Panggilan Balik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Memahami Pemberitahuan Cache SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Pemberitahuan Cache di SQL Server 2000 dan SQL Server 7 . . . . . . . . . . . . 474
Pemberitahuan Cache di SQL Server 2005 dan SQL Server 2008 . . . . . . . . 479
Ketergantungan Cache Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Ketergantungan Cache Kustom Dasar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Ketergantungan Cache Khusus Menggunakan Antrean Pesan. . . . . . . . . . . . . . . 483
Halaman Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Membuat Halaman Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Mengkueri Data di Halaman Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . . 488
Kesalahan Penanganan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Menggunakan Caching dengan Tugas Asinkron. . . . . . . . . . . . . . . . . . . . . . . . . . 492
Beberapa Tugas dan Batas Waktu Asinkron. . . . . . . . . . . . . . . . . . . . . . . . 495
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
■BAB 12 File dan Aliran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Bekerja dengan Sistem File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Kelas Direktori dan File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Kelas DirectoryInfo dan FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Kelas DriveInfo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Bekerja dengan Atribut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Filter File dengan Wildcard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Mengambil Informasi Versi File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Kelas Jalan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Peramban Berkas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Membaca dan Menulis File dengan Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
File Teks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
File Biner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Mengunggah File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Membuat File Aman untuk Banyak Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Kompresi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Serialisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
■BAB 13 LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Dasar-Dasar LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Eksekusi yang Ditunda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
Bagaimana LINQ Bekerja. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
Ekspresi LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
Ekspresi LINQ “Di Balik Terpal”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
LINQ ke Kumpulan Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Kumpulan Data yang Diketik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Nilai Nol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
xvi ■ISI
LINQ ke SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Kelas Entitas Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Konteks Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Kueri LINQ ke SQL “Di Balik Terpal”. . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
LINQ ke SQL dan Komponen Basis Data. . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Memilih Catatan atau Nilai Tunggal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Menghasilkan Data Kelas Secara Otomatis. . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Hubungan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Menghasilkan Metode untuk Prosedur Tersimpan. . . . . . . . . . . . . . . . . . . . . . . . . 571
Melakukan Perubahan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
LinqDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Menampilkan Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Mendapatkan Data Terkait. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Mengedit Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Validasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
■BAB 14 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Kapan Penggunaan XML Masuk Akal?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
Pengantar XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Kelebihan XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
XML yang Dibentuk dengan Baik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Ruang Nama XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Skema XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Pemrosesan XML Berbasis Aliran. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Menulis File XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Membaca File XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Pemrosesan XML Dalam Memori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Dokumen Xml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
XPathNavigator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Dokumen X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Mencari Konten XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Mencari dengan XmlDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Mencari XmlDocument dengan XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Mencari XDocument dengan LINQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Memvalidasi Konten XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Skema Dasar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Memvalidasi dengan XmlDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Memvalidasi dengan XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Mengubah Konten XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Lembar Gaya Dasar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
Menggunakan XslCompiledTransform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
■ISI xvii
Menggunakan Kontrol Xml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Mengubah XML dengan LINQ menjadi XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Pengikatan Data XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Pengikatan Nonhierarki. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Menggunakan XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Grid Bersarang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Pengikatan Hierarki dengan TreeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Menggunakan XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Mengikat Konten XML dari Sumber Lain. . . . . . . . . . . . . . . . . . . . . . . . 637
Memperbarui XML Melalui XmlDataSource . . . . . . . . . . . . . . . . . . . . . . . . 637
XML dan Kumpulan Data ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Mengonversi DataSet ke XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Mengakses DataSet Sebagai XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
BAGIAN 3 ■ ■ ■ Membangun Situs Web ASP.NET
■BAB 15 Kontrol Pengguna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Dasar-dasar Kontrol Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Membuat Kontrol Pengguna Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Mengonversi Halaman menjadi Kontrol Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Menambahkan Kode ke Kontrol Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Menangani Peristiwa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Menambahkan Properti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Menggunakan Objek Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Menambahkan Acara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
Mengekspos Kontrol Web Batin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Memuat Kontrol Pengguna Secara Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Kerangka Portal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Caching Halaman Sebagian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
VaryByControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Berbagi Kontrol Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
■BAB 16 Tema dan Halaman Utama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Lembar Gaya Bertingkat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Membuat Lembar Gaya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Menerapkan Aturan Stylesheet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
xviii ■ISI
Tema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
Folder Tema dan Skin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Menerapkan Tema Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Menangani Konflik Tema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Membuat Banyak Kulit untuk Kontrol yang Sama. . . . . . . . . . . . . . . . . . . . . . . 674
Kulit dengan Templat dan Gambar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Menggunakan CSS dalam Tema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
Menerapkan Tema Melalui File Konfigurasi. . . . . . . . . . . . . . . . . . . . . 677
Menerapkan Tema Secara Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Standarisasi Tata Letak Situs Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Dasar-dasar Halaman Master. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Halaman Master Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
Halaman Konten Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Konten Bawaan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
Halaman Master dengan Tabel dan Tata Letak CSS. . . . . . . . . . . . . . . . . . . . . . . . . 685
Halaman Master dan Jalur Relatif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
Menerapkan Halaman Master Melalui File Konfigurasi. . . . . . . . . . . . . . . . . 688
Halaman Master Tingkat Lanjut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Berinteraksi dengan Kelas Halaman Master. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Menetapkan Halaman Master Secara Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Halaman Master Bersarang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
■BAB 17 Navigasi Situs Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Halaman dengan Banyak Tampilan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Kontrol MultiTampilan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Kontrol Penyihir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
Peta Situs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Mendefinisikan Peta Situs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
Mengikat ke Peta Situs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Tepung roti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Menampilkan Sebagian Peta Situs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Objek Peta Situs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Menambahkan Informasi Peta Situs Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Membuat Penyedia Peta Situs Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Pemetaan URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Pemangkasan Keamanan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
Kontrol TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
Node Pohon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Mengisi Node sesuai Permintaan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Gaya TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
■ISI xix
Kontrol Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Gaya Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
Templat Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
■BAB 18 Penerapan Situs Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Layanan Informasi Internet (IIS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Situs Web IIS dan Direktori Virtual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Konsol Manajemen IIS dan Konfigurasi IIS. . . . . . . . . . . . . . . . . . . . . 747
Memetakan Situs Web, Direktori Virtual, dan File ke URL. . . . . . . . . . . . . 748
Menyelami Arsitektur IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Menginstal IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Mengelola Situs Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
Mengelola Direktori Virtual dan Situs Web dengan IIS 5.x dan IIS 6.0. . . . . . . 772
Mengelola Kumpulan Aplikasi di IIS 6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
Mengelola Direktori Virtual dan Situs Web dengan IIS 7.0. . . . . . . . . . . . . . . 784
Mengelola Kumpulan Aplikasi di IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
Menyebarkan Aplikasi ASP.NET Anda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
Memverifikasi Instalasi ASP.NET pada IIS 5.x dan IIS 6.0. . . . . . . . . . . . . . 800
Eksekusi Berdampingan ASP.NET pada IIS 5.x dan IIS 6.0. . . . . . . . . . . . . . . 801
Eksekusi Berdampingan ASP.NET di IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . 803
Mengonfigurasi Pengaturan Waktu Proses HTTP saat Menerapkan di IIS 5.x. . . . . . . . 803
Model Kompilasi di ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
Menerapkan dengan Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Proyek Penerapan Web Visual Studio 2005. . . . . . . . . . . . . . . . . . . . . . 809
VirtualPathProvider di ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Pemantauan Kesehatan di ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
Memahami Struktur Dasar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Acara dan Penyedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
BAGIAN 4 ■ ■ ■ Keamanan
■BAB 19 Model Keamanan ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Apa Artinya Membuat Perangkat Lunak yang Aman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Memahami Potensi Ancaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Pedoman Pengkodean Aman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Memahami Penjaga Gerbang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Memahami Tingkat Keamanan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Otentikasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Otorisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
xx ■ISI
Kerahasiaan dan Integritas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Menyatukan Semuanya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Keamanan Layanan Informasi Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
Otentikasi dan Otorisasi pada IIS 5.x dan IIS 6.0 . . . . . . . . . . . . . . . 835
Konfigurasi Keamanan pada IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
Memahami Lapisan Soket Aman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Arsitektur Keamanan ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
Otentikasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Otorisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
Konteks Keamanan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
API Keanggotaan dan Peran. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
■BAB 20 Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Memperkenalkan Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Mengapa Menggunakan Otentikasi Formulir? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
Mengapa Anda Tidak Menggunakan Otentikasi Formulir?. . . . . . . . . . . . . . . . . . . . . 862
Mengapa Tidak Menerapkan Otentikasi Cookie Sendiri? . . . . . . . . . . . . . . . . 863
Kelas Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
Menerapkan Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Mengonfigurasi Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
Menolak Akses ke Pengguna Anonim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Membuat Halaman Login Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Penyimpanan Kredensial Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Cookie Persisten dalam Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . 877
IIS 7.0 dan Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
■BAB 21 Keanggotaan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Memperkenalkan API Keanggotaan ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
Menggunakan API Keanggotaan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
Mengonfigurasi Otentikasi Formulir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
Membuat Penyimpanan Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
Mengonfigurasi String Koneksi dan Penyedia Keanggotaan. . . . . . . . . . . . . 896
Membuat dan Mengautentikasi Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
Menggunakan Kontrol Keamanan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
Kontrol Masuk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
Kontrol LoginStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Kontrol LoginView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
Kontrol Pemulihan Kata Sandi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
Kontrol Ubah Kata Sandi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
Kontrol CreateUserWizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
■ISI xxi
Mengonfigurasi Keanggotaan di IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Mengonfigurasi Penyedia dan Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
Menggunakan Membership API dengan Aplikasi Lain. . . . . . . . . . . . . . . . . . 928
Menggunakan Kelas Keanggotaan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Mengambil Pengguna dari Store. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
Memperbarui Pengguna di Toko. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Membuat dan Menghapus Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
Memvalidasi Pengguna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Menggunakan Keanggotaan di Formulir Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
■BAB 22 Otentikasi Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Memperkenalkan Otentikasi Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939
Mengapa Menggunakan Otentikasi Windows? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
Mengapa Anda Tidak Menggunakan Otentikasi Windows? . . . . . . . . . . . . . . . . . . 941
Mekanisme Otentikasi Windows. . . . . . . . . . . . . . . . . . . . . . . . . . 942
Menerapkan Otentikasi Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Mengonfigurasi IIS 5.x atau IIS 6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
Mengonfigurasi IIS 7.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
Konfigurasi ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
Menolak Akses ke Pengguna Anonim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
Mengakses Informasi Pengguna Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
Peniruan identitas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
Peniruan Identitas di Windows 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
Peniruan identitas pada Windows XP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
Peniruan Identitas dan Delegasi pada Windows Server 2003 . . . . . . . . . . . . . 964
Peniruan identitas pada Windows Vista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
Peniruan Identitas dan Delegasi di Windows Server 2008 . . . . . . . . . . . . . 968
Peniruan Identitas yang Dikonfigurasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
Peniruan Identitas Terprogram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
■BAB 23 Otorisasi dan Peran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Otorisasi URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
Aturan Otorisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
Otorisasi File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
Pemeriksaan Otorisasi dalam Kode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Menggunakan Metode IsInRole(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
Menggunakan Kelas PrincipalPermission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
Menggunakan API Peran untuk Otorisasi Berbasis Peran. . . . . . . . . . . . . . . . . . . . . . . . 985
Menggunakan Kontrol LoginView dengan Peran. . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
Mengakses Peran Secara Terprogram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
Menggunakan Roles API dengan Otentikasi Windows. . . . . . . . . . . . . . . . . . . 994
xxii ■ISI
Melindungi Sumber Daya Non-ASP.NET di IIS 5 dan 6 . . . . . . . . . . . . . . . . . . . . . . . . 997
Menambahkan Pemetaan Jenis File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
Menulis Penangan HTTP Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
Otorisasi dan Peran di IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
Otorisasi dengan Peran ASP.NET di IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . 1002
Mengelola Peran ASP.NET dengan IIS 7.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
■BAB 24 Profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Memahami Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Kinerja Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
Bagaimana Profil Menyimpan Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
Profil dan Otentikasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Profil vs. Komponen Data Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
Menggunakan SqlProfileProvider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Membuat Tabel Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Mengonfigurasi Penyedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
Mendefinisikan Properti Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
Menggunakan Properti Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
Serialisasi Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Grup Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
Profil dan Tipe Data Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
API Profil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
Profil Anonim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
Penyedia Profil Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Kelas Penyedia Profil Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Merancang FactoredProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
Mengkodekan FactoredProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
Menguji FactoredProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
■BAB 25 Kriptografi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
Mengenkripsi Data: Kerahasiaan Itu Penting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
Ruang Nama Kriptografi .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
Memahami Kelas Kriptografi .NET. . . . . . . . . . . . . . . . . . . . . . . . . . 1046
Algoritma Enkripsi Simetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
Enkripsi Asimetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
Kelas Enkripsi Abstrak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
Antarmuka ICryptoTransform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
Kelas CryptoStream. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
■ISI xxiii
Mengenkripsi Data Sensitif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
Mengelola Rahasia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
Menggunakan Algoritma Simetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
Menggunakan Algoritma Asimetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
Mengenkripsi Data Sensitif dalam Database. . . . . . . . . . . . . . . . . . . . . . . . . . 1061
Mengenkripsi String Kueri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
Membungkus String Kueri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
Membuat Halaman Uji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
■BAB 26 Penyedia Keanggotaan Khusus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
Arsitektur Penyedia Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
Langkah Dasar Membuat Penyedia Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Desain Keseluruhan Penyedia Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Merancang dan Mengimplementasikan Toko Kustom. . . . . . . . . . . . . . . . . . . . 1074
Menerapkan Kelas Penyedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
Menggunakan Kelas Penyedia Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
BAGIAN 5 ■ ■ ■ Antarmuka Pengguna Tingkat Lanjut
■BAB 27 Kontrol Server Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Dasar-dasar Kontrol Server Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
Membuat Kontrol Kustom Bare-Bones. . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
Menggunakan Kontrol Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
Kontrol Kustom di Toolbox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
Membuat Kontrol Web yang Mendukung Properti Gaya. . . . . . . . . . . . . . 1114
Proses Rendering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
Berurusan dengan Browser yang Berbeda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
HtmlTextWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
Deteksi Peramban. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
Properti Peramban. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122
Mengganti Deteksi Jenis Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
Rendering Adaptif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
Kontrol Status dan Acara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Lihat Negara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
Status Kontrol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129
Data Postback dan Perubahan Acara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131
Memicu Postback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133
Memperluas Kontrol Web yang Ada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
Kontrol Komposit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
Kontrol Turunan Sidebar Akhir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
xxiv ■ISI
Kontrol Templat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Membuat Kontrol Templat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Menggunakan Template yang Disesuaikan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143
Gaya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
■BAB 28 Dukungan Waktu Desain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
Para Pemain Kunci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151
Atribut Waktu Desain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
Jendela Properti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
Atribut dan Warisan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157
Ikon Kotak Alat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158
Sumber Daya Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Membuat Sumber Daya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Mengambil Sumber Daya. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
Substitusi Teks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
Serialisasi Kode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
Ketik Pengonversi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
Atribut Serialisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
Ketik Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
Desainer Kontrol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
HTML Waktu Desain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
Tag Cerdas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
■BAB 29 Grafik Dinamis dan GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
Kontrol Peta Gambar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
Membuat Hotspot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
Menangani Klik Hotspot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
Hotspot Khusus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
Menggambar dengan GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
Menggambar Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
Format dan Kualitas Gambar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
Kelas Grafis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
Menggunakan GraphicsPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Pena. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
Kuas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
Menanamkan Grafik Dinamis di Halaman Web. . . . . . . . . . . . . . . . . . . . . . . . . . 1199
Menggunakan Format PNG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Meneruskan Informasi ke Gambar Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . 1201
Kontrol Kustom yang Menggunakan GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
Memetakan dengan GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
■ISI xxv
■BAB 30 Portal dengan Halaman Komponen Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
Halaman Portal Khas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
Halaman Komponen Web Dasar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
Membuat Desain Halaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218
Kontrol WebPartManager dan WebPartZone . . . . . . . . . . . . . . . . . . . . . . 1219
Menambahkan Komponen Web ke Halaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
Menyesuaikan Halaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224
Membuat Komponen Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226
Tugas Komponen Web Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227
Mengembangkan Komponen Web Tingkat Lanjut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235
Editor Komponen Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244
Menghubungkan Komponen Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250
Kata Kerja Kustom dan Komponen Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258
Kontrol Pengguna dan Komponen Web Tingkat Lanjut. . . . . . . . . . . . . . . . . . . . . . . . . . . 1259
Mengunggah Komponen Web Secara Dinamis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262
Mengotorisasi Komponen Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
Tugas Akhir Personalisasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269
BAGIAN 6 ■ ■ ■ Pemrograman Sisi Klien
■BAB 31 Teknik JavaScript dan Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
Esensi JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273
Model Objek Dokumen HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274
Peristiwa Sisi Klien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275
Blok Skrip. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277
Memanipulasi Elemen HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
Men-debug JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280
Contoh Dasar JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
Membuat Pemroses Halaman JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282
Menggunakan JavaScript untuk Mengunduh Gambar Secara Asinkron. . . . . . . . . . . . . . 1285
Merender Blok Skrip. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290
Serangan Injeksi Skrip. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
Permintaan Validasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291
Menonaktifkan Validasi Permintaan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
Kontrol Khusus dengan JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
Jendela Pop-Up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
Tombol Putar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
Bingkai. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301
Navigasi Bingkai. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302
Bingkai Sebaris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303
xxvi ■ISI
Memahami Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304
Objek XMLHttpRequest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305
Contoh Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307
Menggunakan Ajax dengan Panggilan Balik Klien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Membuat Panggilan Balik Klien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311
Panggilan Balik Klien “Di Balik Terpal”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317
Panggilan Balik Klien dalam Kontrol Kustom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
■BAB 32 ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
Memperkenalkan ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
ASP.NET AJAX di Klien: Perpustakaan Skrip. . . . . . . . . . . . . . . . . . 1325
ASP.NET AJAX di Server: ScriptManager . . . . . . . . . . . . . . . . . . 1325
Panggilan Balik Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326
Layanan Web di ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
Proksi Layanan Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
Menempatkan Metode Web di Halaman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
Layanan Aplikasi ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
Kontrol Server ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
Rendering Sebagian dengan UpdatePanel. . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
Penyegaran Waktu dengan Timer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
Pembaruan yang Memakan Waktu dengan UpdateProgress. . . . . . . . . . . . . . . . . . . . 1352
Lebih dalam ke Perpustakaan Klien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
Memahami Model Klien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
Pemrograman Berorientasi Objek dalam JavaScript. . . . . . . . . . . . . . . . . . . . . . . 1357
Kerangka Halaman Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
Kontrol Extender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
Menginstal Perangkat Kontrol ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . 1370
AutoCompleteExtender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
Perangkat Kontrol ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378
■BAB 33 Cahaya Perak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Memahami Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
Cahaya Perak vs. Kilat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
Adopsi Cahaya Perak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Silverlight dan WPF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
Menginstal Silverlight dan Ekstensi Visual Studio. . . . . . . . . . . . . . . 1383
Membuat Proyek Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
Halaman Entri HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
Skrip Inisialisasi Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
Halaman XAML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
Kode XAML di Belakang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
■ISI xxvii
Properti dan Acara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
Kompilasi Cahaya Perak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
Hal Penting Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
Kelas .NET Framework di Silverlight. . . . . . . . . . . . . . . . . . . . . . . . . . . 1395
Kanvas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
Teks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401
Berinteraksi dengan HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
Penyimpanan Terisolasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
Silverlight dan ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
ASP.NET Berjangka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
Berkomunikasi Antara Silverlight dan ASP.NET. . . . . . . . . . . . . . . . . . 1412
Menggambar dalam 2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
Bentuk Sederhana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413
Jalur dan Geometri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417
Kuas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
Transparansi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
Animasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
Dasar-dasar Animasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
Mendefinisikan Animasi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
Contoh Animasi Interaktif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
Berubah. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
Ringkasan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
■INDEKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
Memperluas