Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Scott Mitchell
Salah satu karakteristik umum situs web yang mudah digunakan adalah bahwa mereka memiliki tata letak halaman dan skema navigasi di seluruh situs yang konsisten. Tutorial ini melihat bagaimana Anda dapat membuat tampilan dan nuansa yang konsisten di semua halaman yang dapat dengan mudah diperbarui.
Pendahuluan
Salah satu karakteristik umum situs web yang mudah digunakan adalah bahwa mereka memiliki tata letak halaman dan skema navigasi di seluruh situs yang konsisten. ASP.NET 2.0 memperkenalkan dua fitur baru yang sangat menyederhanakan penerapan tata letak halaman seluruh situs dan skema navigasi: halaman master dan navigasi situs. Halaman master memungkinkan pengembang membuat templat di seluruh situs dengan wilayah yang dapat diedit yang ditunjuk. Templat ini kemudian dapat diterapkan ke halaman ASP.NET di situs. Halaman ASP.NET tersebut hanya perlu menyediakan konten untuk wilayah yang dapat diedit halaman master yang ditentukan semua markup lain di halaman master identik di semua halaman ASP.NET yang menggunakan halaman master. Model ini memungkinkan pengembang untuk menentukan dan mempusatkan tata letak halaman di seluruh situs, sehingga memudahkan untuk membuat tampilan dan nuansa yang konsisten di semua halaman yang dapat dengan mudah diperbarui.
Sistem navigasi situs menyediakan mekanisme bagi pengembang halaman untuk menentukan peta situs dan API agar peta situs tersebut dikueri secara terprogram. Kontrol Web navigasi baru untuk Menu, TreeView, dan SiteMapPath mempermudah render seluruh atau sebagian peta situs dalam elemen antarmuka pengguna navigasi umum. Kita akan menggunakan penyedia navigasi situs default, yang berarti bahwa peta situs kita akan ditentukan dalam file berformat XML.
Untuk mengilustrasikan konsep-konsep ini dan membuat situs web tutorial kami lebih dapat digunakan, mari kita habiskan pelajaran ini mendefinisikan tata letak halaman di seluruh situs, menerapkan peta situs, dan menambahkan antarmuka pengguna navigasi. Pada akhir tutorial ini, kita akan memiliki desain situs web yang dipolihkan untuk membangun halaman web tutorial kami.
Gambar 1: Hasil Akhir Tutorial Ini (Klik untuk melihat gambar ukuran penuh)
Langkah 1: Membuat Halaman Master
Langkah pertama adalah membuat halaman master untuk situs. Saat ini situs web kami hanya terdiri dari Himpunan Data Yang Diketik (, di Northwind.xsd
folder), kelas BLL (App_Code
, ProductsBLL.vb
, dan sebagainya, semua dalam CategoriesBLL.vb
folder), database (App_Code
, dalam NORTHWND.MDF
folder), file konfigurasi (App_Data
), dan file lembar gaya CSS (Web.config
).Styles.css
Saya membersihkan halaman dan file-file yang menunjukkan menggunakan DAL dan BLL dari dua tutorial pertama karena kita akan mengeluarkan kembali contoh-contoh tersebut secara lebih rinci dalam tutorial di masa mendatang.
Gambar 2: File dalam Proyek Kami
Untuk membuat halaman master, klik kanan nama proyek di Penjelajah Solusi dan pilih Tambahkan Item Baru. Lalu pilih jenis Halaman Master dari daftar templat dan beri nama Site.master
.
Gambar 3: Tambahkan Halaman Master Baru ke Situs Web (Klik untuk melihat gambar ukuran penuh)
Tentukan tata letak halaman seluruh situs di sini di halaman master. Anda dapat menggunakan tampilan Desain dan menambahkan kontrol Tata Letak atau Web apa pun yang Anda butuhkan, atau Anda dapat menambahkan markup secara manual secara manual di tampilan Sumber. Di halaman master saya, saya menggunakan lembar gaya berlapis untuk penempatan dan gaya dengan pengaturan CSS yang ditentukan dalam file Style.css
eksternal. Meskipun Anda tidak dapat mengetahui dari markup yang ditunjukkan di bawah ini, aturan CSS didefinisikan sedemikian rupa agar konten navigasi <div>
benar-benar diposisikan sehingga muncul di sebelah kiri dan memiliki lebar tetap 200 piksel.
Situs.master
<%@ Master Language="VB" AutoEventWireup="true"
CodeFile="Site.master.vb" Inherits="Site" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Working with Data Tutorials</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<form id="form1" runat="server">
<div id="header">
<span class="title">Working with Data Tutorials</span>
<span class="breadcrumb">
TODO: Breadcrumb will go here...</span>
</div>
<div id="content">
<asp:contentplaceholder id="MainContent"
runat="server">
<!-- Page-specific content will go here... -->
</asp:contentplaceholder>
</div>
<div id="navigation">
TODO: Menu will go here...
</div>
</form>
</div>
</body>
</html>
Halaman master menentukan tata letak halaman statis dan wilayah yang dapat diedit oleh halaman ASP.NET yang menggunakan halaman master. Wilayah yang dapat diedit konten ini ditunjukkan oleh kontrol ContentPlaceHolder, yang dapat dilihat dalam konten <div>
. Halaman master kami memiliki satu ContentPlaceHolder (MainContent
), tetapi halaman master mungkin memiliki beberapa ContentPlaceHolders.
Dengan markup yang dimasukkan di atas, beralih ke tampilan Desain memperlihatkan tata letak halaman master. Setiap halaman ASP.NET yang menggunakan halaman master ini akan memiliki tata letak seragam ini, dengan kemampuan untuk menentukan markup untuk wilayah tersebut MainContent
.
Gambar 4: Halaman Master, Saat Dilihat Melalui Tampilan Desain (Klik untuk melihat gambar ukuran penuh)
Langkah 2: Menambahkan Beranda ke Situs Web
Dengan halaman master yang ditentukan, kami siap untuk menambahkan halaman ASP.NET untuk situs web. Mari kita mulai dengan menambahkan Default.aspx
, beranda situs web kami. Klik kanan pada nama proyek di Penjelajah Solusi dan pilih Tambahkan Item Baru. Pilih opsi Formulir Web dari daftar templat dan beri nama file Default.aspx
. Selain itu, centang kotak centang "Pilih halaman master".
Gambar 5: Tambahkan Formulir Web Baru, Memeriksa Kotak Centang Pilih halaman master (Klik untuk melihat gambar ukuran penuh)
Setelah mengklik tombol OK, kami diminta untuk memilih halaman master apa yang harus digunakan halaman ASP.NET baru ini. Meskipun Anda dapat memiliki beberapa halaman master dalam proyek Anda, kami hanya memiliki satu.
Gambar 6: Pilih Halaman Master yang Harus Digunakan halaman ASP.NET ini (Klik untuk melihat gambar ukuran penuh)
Setelah memilih halaman master, halaman ASP.NET baru akan berisi markup berikut:
Default.aspx
<%@ Page Language="VB" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="Default.aspx.vb"
Inherits="_Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent"
Runat="Server">
</asp:Content>
Dalam direktif @Page
ada referensi ke file halaman master yang digunakan (MasterPageFile="~/Site.master"
), dan markup halaman ASP.NET berisi kontrol Konten untuk setiap kontrol ContentPlaceHolder yang ditentukan di halaman master, dengan kontrol kontrol ContentPlaceHolderID
pemetaan Konten ke ContentPlaceHolder tertentu. Kontrol Konten adalah tempat Anda menempatkan markup yang ingin Anda munculkan di ContentPlaceHolder yang sesuai. Atur atribut direktif @Page
Title
ke Beranda dan tambahkan beberapa konten yang menyambut ke kontrol Konten:
Default.aspx
<%@ Page Language="VB" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="Default.aspx.vb"
Inherits="_Default" Title="Home" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent"
Runat="Server">
<h1>Welcome to the Working with Data Tutorial Site</h1>
<p>This site is being built as part of a set of tutorials
that illustrate some of the new data access and databinding
features in ASP.NET 2.0 and Visual Web Developer.</p>
<p>Over time, it will include a host of samples that
demonstrate:</p>
<ul>
<li>Building a DAL (data access layer),</li>
<li>Using strongly typed TableAdapters and DataTables</li>
<li>Master-Detail reports</li>
<li>Filtering</li>
<li>Paging,</li>
<li>Two-way databinding,</li>
<li>Editing,</li>
<li>Deleting,</li>
<li>Inserting,</li>
<li>Hierarchical data browsing,</li>
<li>Hierarchical drill-down,</li>
<li>Optimistic concurrency,</li>
<li>And more!</li>
</ul>
</asp:Content>
Atribut Title
dalam direktif @Page
memungkinkan kita untuk mengatur judul halaman dari halaman ASP.NET, meskipun <title>
elemen ditentukan di halaman master. Kita juga dapat mengatur judul secara terprogram, menggunakan Page.Title
. Perhatikan juga bahwa referensi halaman master ke lembar gaya (seperti Style.css
) diperbarui secara otomatis sehingga dapat berfungsi di halaman ASP.NET mana pun, terlepas dari direktori tempat halaman ASP.NET tersebut berada relatif terhadap halaman master.
Beralih ke tampilan Desain, kita dapat melihat bagaimana halaman kita akan terlihat di browser. Catat bahwa di tampilan Desain untuk halaman ASP.NET, hanya wilayah yang dapat diedit dari konten yang bisa diubah. Sementara itu, markup non-ContentPlaceHolder yang ditentukan di halaman master akan berwarna abu-abu.
Gambar 7: Tampilan Desain untuk Halaman ASP.NET Memperlihatkan Wilayah yang Dapat Diedit dan Tidak Dapat Diedit (Klik untuk melihat gambar ukuran penuh)
Default.aspx
Ketika halaman dikunjungi oleh browser, mesin ASP.NET secara otomatis menggabungkan konten halaman master dan konten ASP.NET, serta merender konten yang sudah digabungkan menjadi HTML final yang dikirim ke browser yang meminta. Ketika konten halaman master diperbarui, semua halaman ASP.NET yang menggunakan halaman master ini akan diperbarui kontennya dengan digabungkan kembali dengan konten halaman master baru saat permintaan berikutnya dilakukan. Singkatnya, model halaman master memungkinkan templat tata letak satu halaman ditentukan (halaman master) yang perubahannya segera tercermin di seluruh situs.
Menambahkan Halaman ASP.NET Tambahan ke Situs Web
Mari kita luangkan waktu sejenak untuk menambahkan stub halaman ASP.NET tambahan ke situs yang akhirnya akan menyimpan berbagai demo pelaporan. Total akan ada lebih dari 35 demo, jadi daripada membuat semua halaman stub mari kita buat beberapa yang pertama. Karena juga akan ada banyak kategori demo, untuk mengelola demo dengan lebih baik menambahkan folder untuk kategori. Tambahkan tiga folder berikut untuk saat ini:
BasicReporting
Filtering
CustomFormatting
Terakhir, tambahkan file baru seperti yang ditunjukkan di Penjelajah Solusi di Gambar 8. Saat menambahkan setiap file, ingatlah untuk mencentang kotak centang "Pilih halaman master".
Gambar 8: Tambahkan File Berikut
Langkah 2: Membuat Peta Situs
Salah satu tantangan dalam mengelola situs web yang terdiri dari lebih dari segelintir halaman adalah memberikan cara mudah bagi pengunjung untuk menavigasi melalui situs. Untuk memulainya, struktur navigasi situs harus ditentukan. Selanjutnya, struktur ini harus diterjemahkan ke dalam elemen antarmuka pengguna yang dapat dinavigasi, seperti menu atau remah roti. Akhirnya, seluruh proses ini perlu dipertahankan dan diperbarui karena halaman baru ditambahkan ke situs dan yang sudah ada dihapus. Sebelum ASP.NET 2.0, pengembang berada sendiri untuk membuat struktur navigasi situs, mempertahankannya, dan menerjemahkannya ke dalam elemen antarmuka pengguna yang dapat dinavigasi. Namun, dengan ASP.NET 2.0, pengembang dapat menggunakan sistem navigasi situs bawaan yang sangat fleksibel.
Sistem navigasi situs ASP.NET 2.0 menyediakan sarana bagi pengembang untuk menentukan peta situs dan kemudian mengakses informasi ini melalui API terprogram. ASP.NET dikirim dengan penyedia peta situs yang mengharapkan data peta situs disimpan dalam file XML yang diformat dengan cara tertentu. Tetapi, karena sistem navigasi situs dibangun pada model penyedia , sistem dapat diperluas untuk mendukung cara alternatif untuk menserialisasikan informasi peta situs. Artikel Jeff Prosise, Penyedia Peta Situs SQL yang Sudah Anda Tunggu menunjukkan cara membuat penyedia peta situs yang menyimpan peta situs dalam database SQL Server.
Namun, untuk tutorial ini, mari kita gunakan penyedia peta situs default yang dikirim dengan ASP.NET 2.0. Untuk membuat peta situs, cukup klik kanan pada nama proyek di Penjelajah Solusi, pilih Tambahkan Item Baru, dan pilih opsi Peta Situs. Biarkan nama sebagai Web.sitemap
dan klik tombol Tambahkan.
Gambar 9: Tambahkan Peta Situs ke Proyek Anda (Klik untuk melihat gambar ukuran penuh)
File peta situs adalah file XML. Perhatikan bahwa Visual Studio menyediakan IntelliSense untuk struktur peta situs. File peta situs harus memiliki simpul <siteMap>
sebagai simpul akarnya, yang harus berisi tepat satu <siteMapNode>
elemen anak. Elemen pertama <siteMapNode>
tersebut kemudian dapat berisi jumlah elemen keturunan <siteMapNode>
yang tidak terbatas.
Tentukan peta situs untuk meniluki struktur sistem file. Artinya, tambahkan <siteMapNode>
elemen untuk masing-masing dari tiga folder, dan elemen turunan <siteMapNode>
untuk setiap halaman ASP.NET di folder tersebut, seperti:
Peta Situs
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Default.aspx" title="Home" description="Home">
<siteMapNode title="Basic Reporting"
url="~/BasicReporting/Default.aspx"
description="Basic Reporting Samples">
<siteMapNode url="~/BasicReporting/SimpleDisplay.aspx"
title="Simple Display"
description="Displays the complete contents
of a database table." />
<siteMapNode url="~/BasicReporting/DeclarativeParams.aspx"
title="Declarative Parameters"
description="Displays a subset of the contents
of a database table using parameters." />
<siteMapNode url="~/BasicReporting/ProgrammaticParams.aspx"
title="Setting Parameter Values"
description="Shows how to set parameter values
programmatically." />
</siteMapNode>
<siteMapNode title="Filtering Reports"
url="~/Filtering/Default.aspx"
description="Samples of Reports that Support Filtering">
<siteMapNode url="~/Filtering/FilterByDropDownList.aspx"
title="Filter by Drop-Down List"
description="Filter results using a drop-down list." />
<siteMapNode url="~/Filtering/MasterDetailsDetails.aspx"
title="Master-Details-Details"
description="Filter results two levels down." />
<siteMapNode url="~/Filtering/DetailsBySelecting.aspx"
title="Details of Selected Row"
description="Show detail results for a selected item in a GridView." />
</siteMapNode>
<siteMapNode title="Customized Formatting"
url="~/CustomFormatting/Default.aspx"
description="Samples of Reports Whose Formats are Customized">
<siteMapNode url="~/CustomFormatting/CustomColors.aspx"
title="Format Colors"
description="Format the grid s colors based
on the underlying data." />
<siteMapNode
url="~/CustomFormatting/GridViewTemplateField.aspx"
title="Custom Content in a GridView"
description="Shows using the TemplateField to
customize the contents of a field in a GridView." />
<siteMapNode
url="~/CustomFormatting/DetailsViewTemplateField.aspx"
title="Custom Content in a DetailsView"
description="Shows using the TemplateField to customize
the contents of a field in a DetailsView." />
<siteMapNode url="~/CustomFormatting/FormView.aspx"
title="Custom Content in a FormView"
description="Illustrates using a FormView for a
highly customized view." />
<siteMapNode url="~/CustomFormatting/SummaryDataInFooter.aspx"
title="Summary Data in Footer"
description="Display summary data in the grids footer." />
</siteMapNode>
</siteMapNode>
</siteMap>
Peta situs menentukan struktur navigasi situs web, yang merupakan hierarki yang menjelaskan berbagai bagian situs. Setiap <siteMapNode>
elemen dalam Web.sitemap
mewakili bagian dalam struktur navigasi situs.
Gambar 10: Peta Situs Mewakili Struktur Navigasi Hierarkis (Klik untuk melihat gambar ukuran penuh)
ASP.NET mengekspos struktur peta situs melalui kelas SiteMap .NET Framework. Kelas ini memiliki CurrentNode
properti, yang mengembalikan informasi tentang bagian yang saat ini dikunjungi pengguna; RootNode
properti mengembalikan akar peta situs (Beranda, di peta situs kami).
CurrentNode
dan RootNode
properti mengembalikan instans SiteMapNode, yang memiliki properti seperti ParentNode
, ChildNodes
, NextSibling
, PreviousSibling
, dan sebagainya, yang memungkinkan hierarki peta situs diikuti.
Langkah 3: Menampilkan Menu Berdasarkan Peta Situs
Mengakses data di ASP.NET 2.0 dapat dicapai secara terprogram, seperti di ASP.NET 1.x, atau secara deklaratif, melalui kontrol sumber data baru. Ada beberapa kontrol sumber data bawaan seperti kontrol SqlDataSource, untuk mengakses data database relasional, kontrol ObjectDataSource, untuk mengakses data dari kelas, dan lainnya. Anda bahkan dapat membuat kontrol sumber data kustom Anda sendiri.
Kontrol sumber data berfungsi sebagai proksi antara halaman ASP.NET Anda dan data yang mendasar. Untuk menampilkan data yang diambil kontrol sumber data, kami biasanya akan menambahkan kontrol Web lain ke halaman dan mengikatnya ke kontrol sumber data. Untuk mengikat kontrol Web ke kontrol sumber data, cukup atur properti kontrol DataSourceID
Web ke nilai properti kontrol ID
sumber data.
Untuk membantu bekerja dengan data peta situs, ASP.NET menyertakan kontrol SiteMapDataSource, yang memungkinkan kami untuk mengikat kontrol Web terhadap peta situs situs web kami. Dua kontrol Web TreeView dan Menu umumnya digunakan untuk menyediakan antarmuka pengguna navigasi. Untuk mengikat data peta situs ke salah satu dari dua kontrol ini, cukup tambahkan SiteMapDataSource ke halaman bersama dengan kontrol TreeView atau Menu yang propertinya DataSourceID
diatur sesuai. Misalnya, kita dapat menambahkan kontrol Menu ke halaman master menggunakan markup berikut:
<div id="navigation">
<asp:Menu ID="Menu1" runat="server"
DataSourceID="SiteMapDataSource1">
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
</div>
Untuk tingkat kontrol yang lebih baik atas HTML yang dipancarkan, kita dapat mengikat kontrol SiteMapDataSource ke kontrol Repeater, seperti:
<div id="navigation">
<ul>
<li><asp:HyperLink runat="server" ID="lnkHome"
NavigateUrl="~/Default.aspx">Home</asp:HyperLink></li>
<asp:Repeater runat="server" ID="menu"
DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink runat="server"
NavigateUrl='<%# Eval("Url") %>'>
<%# Eval("Title") %></asp:HyperLink>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
<asp:SiteMapDataSource ID="SiteMapDataSource1"
runat="server" ShowStartingNode="false" />
</div>
Kontrol SiteMapDataSource mengembalikan hierarki peta situs satu tingkat sekaligus, dimulai dengan simpul peta situs akar (Beranda, di peta situs kami), lalu tingkat berikutnya (Pelaporan Dasar, Laporan Pemfilteran, dan Pemformatan yang Dikustomisasi), dan sebagainya. Saat mengikat SiteMapDataSource ke Repeater, itu mendata tingkat pertama yang dikembalikan dan menginisialisasi ItemTemplate
untuk setiap objek SiteMapNode
di tingkat pertama tersebut. Untuk mengakses properti tertentu dari SiteMapNode
, kita dapat menggunakan Eval(propertyName)
, yang memungkinkan kita mendapatkan masing-masing properti SiteMapNode
dan Url
dari kontrol HyperLink.
Contoh Repeater di atas akan merender markup berikut:
<li>
<a href="/Code/BasicReporting/Default.aspx">Basic Reporting</a>
</li>
<li>
<a href="/Code/Filtering/Default.aspx">Filtering Reports</a>
</li>
<li>
<a href="/Code/CustomFormatting/Default.aspx">
Customized Formatting</a>
</li>
Simpul peta situs ini (Pelaporan Dasar, Laporan Pemfilteran, dan Pemformatan yang Dikustomisasi) terdiri dari tingkat kedua peta situs yang dirender, bukan yang pertama. Ini karena properti ShowStartingNode
dari SiteMapDataSource diatur ke False, menyebabkan SiteMapDataSource melewati simpul peta situs akar dan memulai dari tingkat kedua dalam hierarki peta situs.
Untuk menampilkan turunan untuk Pelaporan Dasar, Laporan Pemfilteran, dan Pemformatan yang dikustomisasi, kita bisa menambahkan Repeater lain ke Repeater awal. Repeater kedua ini akan terikat ke properti SiteMapNode
pada instans ChildNodes
, seperti:
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li>
<asp:HyperLink runat="server"
NavigateUrl='<%# Eval("Url") %>'>
<%# Eval("Title") %></asp:HyperLink>
<asp:Repeater runat="server"
DataSource="<%# CType(Container.DataItem,
SiteMapNode).ChildNodes %>">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink runat="server"
NavigateUrl='<%# Eval("Url") %>'>
<%# Eval("Title") %></asp:HyperLink>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
</asp:Repeater>
Kedua Pengulang ini menghasilkan markup berikut (beberapa markup telah dihapus untuk kejelasan):
<li>
<a href="/Code/BasicReporting/Default.aspx">Basic Reporting</a>
<ul>
<li>
<a href="/Code/BasicReporting/SimpleDisplay.aspx">
Simple Display</a>
</li>
<li>
<a href="/Code/BasicReporting/DeclarativeParams.aspx">
Declarative Parameters</a>
</li>
<li>
<a href="/Code/BasicReporting/ProgrammaticParams.aspx">
Setting Parameter Values</a>
</li>
</ul>
</li>
<li>
<a href="/Code/Filtering/Default.aspx">Filtering Reports</a>
...
</li>
<li>
<a href="/Code/CustomFormatting/Default.aspx">
Customized Formatting</a>
...
</li>
Menggunakan gaya CSS yang dipilih dari buku Rachel AndrewThe CSS Anthology: 101 Essential Tips, Tricks, & Hacks, elemen <ul>
dan <li>
ditata sedemikian rupa sehingga markup menghasilkan output visual berikut:
Gambar 11: Menu yang Terdiri dari Dua Pengulang dan Beberapa CSS
Menu ini berada di halaman master dan terikat ke peta situs yang ditentukan dalam Web.sitemap
, yang berarti bahwa setiap perubahan pada peta situs akan segera tercermin pada semua halaman yang menggunakan Site.master
halaman master.
Menonaktifkan ViewState
Semua kontrol ASP.NET dapat secara opsional mempertahankan statusnya ke status tampilan, yang diserialisasikan sebagai bidang formulir tersembunyi di HTML yang dirender. Status tampilan digunakan oleh kontrol untuk mengingat keadaan yang telah diubah secara terprogram saat proses postback, seperti data yang diikat ke kontrol Web data. Meskipun status tampilan mengizinkan informasi untuk diingat di seluruh postback, itu meningkatkan ukuran markup yang harus dikirim ke klien dan dapat menyebabkan kembung halaman yang parah jika tidak dipantau dengan cermat. Kontrol Web Data terutama GridView sangat terkenal untuk menambahkan puluhan kilobyte markup ekstra ke halaman. Meskipun peningkatan tersebut dapat diabaikan untuk pengguna broadband atau intranet, view state dapat menambahkan beberapa detik ke waktu transmisi bolak-balik untuk pengguna dial-up.
Untuk melihat dampak status tampilan, kunjungi halaman di browser lalu lihat sumber yang dikirim oleh halaman web (di Internet Explorer, buka menu Tampilan dan pilih opsi Sumber). Anda juga dapat mengaktifkan pelacakan halaman untuk melihat alokasi status tampilan yang digunakan oleh setiap kontrol di halaman. Informasi status tampilan diserialisasikan dalam bidang formulir tersembunyi bernama __VIEWSTATE
, dalam elemen <div>
yang terletak segera setelah tag pembuka <form>
. Status tampilan hanya bertahan ketika ada Formulir Web yang digunakan; jika halaman ASP.NET Anda tidak menyertakan <form runat="server">
dalam sintaks deklaratifnya, tidak akan __VIEWSTATE
ada bidang formulir tersembunyi dalam markup yang dirender.
Bidang __VIEWSTATE
formulir yang dihasilkan oleh halaman induk menambahkan sekitar 1.800 byte ke kode yang dihasilkan halaman. Kelebihan beban ini terutama disebabkan oleh kontrol Repeater, karena konten kontrol SiteMapDataSource dipertahankan dalam status tampilan. Meskipun tambahan 1.800 byte mungkin tidak terlihat signifikan, pada penggunaan GridView dengan banyak bidang dan catatan, status tampilan dapat dengan mudah meningkat sepuluh kali lipat atau lebih.
Status tampilan dapat dinonaktifkan di halaman atau tingkat kontrol dengan mengatur EnableViewState
properti ke False
, sehingga mengurangi ukuran markup yang dirender. Karena status tampilan untuk kontrol Web data mempertahankan data yang terikat ke kontrol Web data di seluruh postback, saat menonaktifkan status tampilan untuk kontrol Web data, data harus terikat pada setiap postback. Dalam ASP.NET versi 1.x tanggung jawab ini jatuh di pundak pengembang halaman; namun, dengan ASP.NET 2.0, kontrol Web data akan digabungkan kembali ke kontrol sumber data mereka pada setiap postback jika diperlukan.
Untuk mengurangi status tampilan halaman, mari atur properti kontrol EnableViewState
Pengulang ke False
. Ini dapat dilakukan melalui jendela Properti di Perancang atau secara deklaratif dalam tampilan Sumber. Setelah membuat perubahan ini, markup deklaratif Repeater akan terlihat seperti:
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1"
EnableViewState="False">
<ItemTemplate>
... <i>ItemTemplate contents omitted for brevity</i> ...
</ItemTemplate>
</asp:Repeater>
Setelah perubahan ini, ukuran status tampilan halaman yang dirender telah menyusut menjadi hanya 52 byte, penghematan 97% dalam ukuran status tampilan! Dalam tutorial di seluruh seri ini kita akan menonaktifkan status tampilan kontrol Web data secara default untuk mengurangi ukuran markup yang dirender. Dalam sebagian besar contoh, properti EnableViewState
akan diatur ke False
dan tidak disebutkan. Satu-satunya status tampilan waktu yang akan dibahas adalah dalam skenario di mana ia harus diaktifkan agar kontrol Web data menyediakan fungsionalitas yang diharapkan.
Langkah 4: Menambahkan Navigasi Breadcrumb
Untuk menyelesaikan halaman master, mari kita tambahkan elemen antarmuka pengguna navigasi breadcrumb ke setiap halaman. Jejak navigasi dengan cepat menunjukkan posisi saat ini untuk pengguna dalam hierarki situs. Menambahkan breadcrumb di ASP.NET 2.0 mudah hanya dengan menambahkan kontrol SiteMapPath ke halaman; tidak ada kode yang diperlukan.
Untuk situs kami, tambahkan kontrol ini ke header <div>
:
<span class="breadcrumb">
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
</asp:SiteMapPath>
</span>
Breadcrumb menunjukkan halaman saat ini yang dikunjungi pengguna dalam hierarki peta situs serta "leluhur" node peta situs tersebut, hingga ke akar (Beranda, di peta situs kami).
Gambar 12: Breadcrumb Menampilkan Halaman Saat Ini dan Leluhurnya dalam Hierarki Peta Situs
Langkah 5: Menambahkan Halaman Default untuk Setiap Bagian
Tutorial di situs kami dipecah menjadi berbagai kategori Pelaporan Dasar, Pemfilteran, Pemformatan Kustom, dan sebagainya dengan folder untuk setiap kategori dan tutorial yang sesuai sebagai halaman ASP.NET dalam folder tersebut. Selain itu, setiap folder berisi halaman Default.aspx
. Untuk halaman default ini, mari kita tampilkan semua tutorial untuk bagian saat ini. Artinya, untuk Default.aspx
di BasicReporting
folder kita akan memiliki tautan ke SimpleDisplay.aspx
, , DeclarativeParams.aspx
dan ProgrammaticParams.aspx
. Di sini, sekali lagi, kita dapat menggunakan SiteMap
kelas dan kontrol Web data untuk menampilkan informasi ini berdasarkan peta situs yang ditentukan dalam Web.sitemap
.
Mari kita tampilkan daftar yang tidak diurutkan menggunakan Repeater lagi, tetapi kali ini kita akan menampilkan judul dan deskripsi tutorial. Karena markup dan kode untuk mencapai hal ini perlu diulang untuk setiap Default.aspx
halaman, kita dapat merangkum logika UI ini dalam Kontrol Pengguna. Buat folder di situs web yang disebut UserControls
dan tambahkan ke item baru tipe Kontrol Pengguna Web bernama SectionLevelTutorialListing.ascx
, dan tambahkan markup berikut:
Gambar 13: Tambahkan Kontrol Pengguna Web Baru ke UserControls
Folder (Klik untuk melihat gambar ukuran penuh)
SectionLevelTutorialListing.ascx
<%@ Control Language="VB" AutoEventWireup="true"
CodeFile="SectionLevelTutorialListing.ascx.vb"
Inherits="UserControls_SectionLevelTutorialListing" %>
<asp:Repeater ID="TutorialList" runat="server" EnableViewState="False">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink runat="server"
NavigateUrl='<%# Eval("Url") %>'
Text='<%# Eval("Title") %>'></asp:HyperLink>
- <%# Eval("Description") %></li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
SectionLevelTutorialListing.ascx.vb
Partial Class UserControls_SectionLevelTutorialListing
Inherits UserControl
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If SiteMap.CurrentNode IsNot Nothing Then
TutorialList.DataSource = SiteMap.CurrentNode.ChildNodes
TutorialList.DataBind()
End If
End Sub
End Class
Dalam contoh Repeater sebelumnya, kami mengikat SiteMap
data ke Repeater secara deklaratif; SectionLevelTutorialListing
Kontrol Pengguna, namun, melakukannya secara terprogram. Di penanganan kejadian Page_Load
, pemeriksaan dilakukan untuk memastikan bahwa URL halaman ini dipetakan ke simpul di struktur situs. Jika Kontrol Pengguna ini digunakan di halaman yang tidak memiliki entri yang <siteMapNode>
sesuai, SiteMap.CurrentNode
akan mengembalikan Nothing
dan tidak ada data yang akan diikatkan ke Repeater. Dengan asumsi kami memiliki CurrentNode
, kami mengikat koleksi ChildNodes
ke Repeater. Karena peta situs kami disiapkan sehingga halaman Default.aspx
di setiap bagian adalah simpul induk dari semua tutorial di dalam bagian tersebut, kode ini akan menampilkan tautan dan deskripsi semua tutorial di bagian tersebut, seperti yang ditunjukkan pada cuplikan layar di bawah ini.
Setelah Pengulang ini dibuat, buka halaman Default.aspx
di setiap folder, kemudian buka tampilan Desain, dan cukup seret Kontrol Pengguna dari Penjelajah Solusi ke permukaan Desain di lokasi yang Anda inginkan untuk menampilkan daftar tutorial.
Gambar 14: Kontrol Pengguna telah Ditambahkan ke Default.aspx
(Klik untuk melihat gambar ukuran penuh)
Gambar 15: Tutorial Pelaporan Dasar tercantum (Klik untuk melihat gambar ukuran penuh)
Ringkasan
Dengan peta situs yang ditentukan dan halaman master selesai, kami sekarang memiliki tata letak halaman yang konsisten dan skema navigasi untuk tutorial terkait data kami. Terlepas dari berapa banyak halaman yang kami tambahkan ke situs kami, memperbarui tata letak halaman seluruh situs atau informasi navigasi situs adalah proses yang cepat dan sederhana karena informasi ini sedang dipusatkan. Secara khusus, informasi tata letak halaman ditentukan di halaman Site.master
master dan peta situs di Web.sitemap
. Kami tidak perlu menulis kode apa pun untuk mencapai tata letak halaman dan mekanisme navigasi di seluruh situs ini, dan kami mempertahankan dukungan desainer WYSIWYG penuh di Visual Studio.
Setelah menyelesaikan Lapisan Akses Data dan Lapisan Logika Bisnis dan memiliki tata letak halaman yang konsisten dan navigasi situs yang ditentukan, kami siap untuk mulai menjelajahi pola pelaporan umum. Dalam tiga tutorial berikutnya kita akan melihat tugas pelaporan dasar yang menampilkan data yang diambil dari BLL di kontrol GridView, DetailsView, dan FormView.
Selamat Pemrograman!
Bacaan Lebih Lanjut
Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut:
- Ikhtisar Halaman Induk ASP.NET
- Halaman Master pada ASP.NET 2.0
- Templat Desain ASP.NET 2.0
- Gambaran Umum Navigasi Situs ASP.NET
- Memeriksa Navigasi Situs ASP.NET 2.0
- ASP.NET 2.0 Fitur Navigasi Situs
- Memahami Status Tampilan ASP.NET
- Cara: Mengaktifkan Pelacakan untuk Halaman ASP.NET
- Kontrol Pengguna ASP.NET
Tentang Penulis
Scott Mitchell, penulis tujuh buku ASP/ASP.NET dan pendiri 4GuysFromRolla.com, telah bekerja sama dengan teknologi Microsoft Web sejak 1998. Scott bekerja sebagai konsultan, pelatih, dan penulis independen. Buku terbarunya adalah Sams Teach Yourself ASP.NET 2.0 dalam 24 Jam. Dia dapat dijangkau di mitchell@4GuysFromRolla.com.
Ucapan terima kasih khusus kepada
Seri tutorial ini ditinjau oleh banyak peninjau yang bermanfaat. Peninjau utama untuk tutorial ini adalah Liz Shulok, Dennis Patterson, dan Hilton Giesenow. Tertarik untuk meninjau artikel MSDN saya yang akan datang? Jika demikian, hubungi saya di mitchell@4GuysFromRolla.com.