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.
Dokumen ini memberikan gambaran umum tentang banyak fitur baru untuk ASP.NET yang disertakan dalam the.NET Framework 4 dan di Visual Studio 2010.
Konten
Layanan Inti
Pemfaktoran Ulang FileWeb.config
Penembolokan Output yang Dapat Diperluas
Mulai Otomatis Aplikasi Web
Mengalihkan Halaman Secara Permanen
Menyusutkan Status Sesi
Memperluas Rentang URL yang Diizinkan
Validasi Permintaan yang Dapat Diperluas
Ekstensibilitas Penembolokan Objek dan Penembolokan Objek
Html, URL, dan Pengodean Header HTTP yang dapat diperluas
Pemantauan Performa untuk Aplikasi Individu dalam Satu Proses Pekerja
Multi-Penargetan
Ajax
jQuery Disertakan dengan Formulir Web dan MVC
Dukungan Content Delivery Network
ScriptManager Skrip Eksplisit
Formulir Web
Mengatur Tag Meta dengan Properti Page.MetaKeywords dan Page.MetaDescription
Mengaktifkan Status Tampilan untuk Kontrol Individual
Perubahan pada Kapabilitas Browser
Perutean di ASP.NET 4
Mengatur ID Klien
Pemilihan Baris Persisten dalam Kontrol Data
Kontrol Bagan
Memfilter Data dengan Kontrol QueryExtender
Ekspresi Kode Terkodekan Html
Perubahan Templat Proyek
Penyempurnaan CSS
Menyembunyikan Elemen div Di Sekitar Bidang Tersembunyi
Merender Tabel Luar untuk Kontrol Ber template
Penyempurnaan Kontrol ListView
CheckBoxList dan Penyempurnaan Kontrol RadioButtonList
Peningkatan Kontrol Menu
Wizard dan CreateUserWizard Controls 56
ASP.NET MVC
Dukungan Area
Dukungan Validasi Atribut Anotasi Data
Pembantu Ber templat
Data Dinamis
Mengaktifkan Data Dinamis untuk Proyek yang Ada
Sintaks Kontrol DynamicDataManager Deklaratif
Templat Entitas
Templat Bidang Baru untuk URL dan Alamat Email
Membuat Tautan dengan Kontrol DynamicHyperLink
Dukungan untuk Pewarisan dalam Model Data
Dukungan untuk Hubungan Banyak-ke-Banyak (Hanya Kerangka Kerja Entitas)
Atribut Baru untuk Tampilan Kontrol dan Enumerasi Dukungan
Dukungan yang Ditingkatkan untuk Filter
Peningkatan Pengembangan Web Visual Studio 2010
Kompatibilitas CSS yang Ditingkatkan
Cuplikan HTML dan JavaScript
Penyempurnaan JavaScript IntelliSense
Penyebaran Aplikasi Web dengan Visual Studio 2010
Kemasan Web
TransformasiWeb.config
Penyebaran Database
Terbitkan Satu Klik untuk Aplikasi Web
Sumber daya
Layanan Inti
ASP.NET 4 memperkenalkan sejumlah fitur yang meningkatkan layanan ASP.NET inti seperti penembolokan output dan penyimpanan status sesi.
Web.config Pemfaktoran Ulang File
File Web.config
yang berisi konfigurasi untuk aplikasi Web telah berkembang pesat selama beberapa rilis .NET Framework terakhir karena fitur baru telah ditambahkan, seperti Ajax, perutean, dan integrasi dengan IIS 7. Ini telah membuatnya lebih sulit untuk mengonfigurasi atau memulai aplikasi Web baru tanpa alat seperti Visual Studio. Di .NET Framework 4, elemen konfigurasi utama telah dipindahkan ke machine.config
file, dan aplikasi sekarang mewarisi pengaturan ini. Ini memungkinkan Web.config
file dalam ASP.NET 4 aplikasi kosong atau hanya berisi baris berikut, yang menentukan untuk Visual Studio versi kerangka kerja apa yang ditargetkan aplikasi:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
</configuration>
Penembolokan Output yang Dapat Diperluas
Sejak ASP.NET 1.0 dirilis, penembolokan output telah memungkinkan pengembang untuk menyimpan output halaman, kontrol, dan respons HTTP yang dihasilkan dalam memori. Pada permintaan Web berikutnya, ASP.NET dapat menyajikan konten lebih cepat dengan mengambil output yang dihasilkan dari memori alih-alih meregenerasi output dari awal. Namun, pendekatan ini memiliki batasan - konten yang dihasilkan selalu harus disimpan dalam memori, dan di server yang mengalami lalu lintas berat, memori yang dikonsumsi oleh penembolokan output dapat bersaing dengan tuntutan memori dari bagian lain dari aplikasi Web.
ASP.NET 4 menambahkan titik ekstensibilitas ke penembolokan output yang memungkinkan Anda mengonfigurasi satu atau beberapa penyedia cache output kustom. Penyedia cache output dapat menggunakan mekanisme penyimpanan apa pun untuk mempertahankan konten HTML. Ini memungkinkan untuk membuat penyedia cache output kustom untuk mekanisme persistensi yang beragam, yang dapat mencakup disk lokal atau jarak jauh, penyimpanan cloud, dan mesin cache terdistribusi.
Anda membuat penyedia output-cache kustom sebagai kelas yang berasal dari jenis System.Web.Caching.OutputCacheProvider baru. Anda kemudian dapat mengonfigurasi penyedia dalam Web.config
file dengan menggunakan subbagian penyedia baru dari elemen outputCache , seperti yang ditunjukkan dalam contoh berikut:
<caching>
<outputCache defaultProvider="AspNetInternalProvider">
<providers>
<add name="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
Secara default di ASP.NET 4, semua respons HTTP, halaman yang dirender, dan kontrol menggunakan cache output dalam memori, seperti yang ditunjukkan pada contoh sebelumnya, di mana atribut defaultProvider diatur ke AspNetInternalProvider. Anda dapat mengubah penyedia output-cache default yang digunakan untuk aplikasi Web dengan menentukan nama penyedia yang berbeda untuk defaultProvider.
Selain itu, Anda dapat memilih penyedia output-cache yang berbeda per kontrol dan per permintaan. Cara termampu untuk memilih penyedia output-cache yang berbeda untuk kontrol pengguna Web yang berbeda adalah dengan melakukannya secara deklaratif dengan menggunakan atribut providerName baru dalam direktif kontrol, seperti yang ditunjukkan dalam contoh berikut:
<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
Menentukan penyedia cache output yang berbeda untuk permintaan HTTP memerlukan sedikit lebih banyak pekerjaan. Alih-alih menentukan penyedia secara deklaratif, Anda mengganti metode GetOuputCacheProviderName baru dalam Global.asax
file untuk secara terprogram menentukan penyedia mana yang akan digunakan untuk permintaan tertentu. Contoh berikut menunjukkan cara melakukannya.
public override string GetOutputCacheProviderName(HttpContext context)
{
if (context.Request.Path.EndsWith("Advanced.aspx"))
return "DiskCache";
else
return base.GetOutputCacheProviderName(context);
}
Dengan penambahan ekstensibilitas penyedia output-cache ke ASP.NET 4, Anda sekarang dapat mengejar strategi penembolokan output yang lebih agresif dan lebih cerdas untuk situs Web Anda. Misalnya, sekarang dimungkinkan untuk menyimpan halaman "10 Teratas" situs dalam memori, sementara halaman penembolokan yang mendapatkan lalu lintas yang lebih rendah pada disk. Atau, Anda dapat menyimpan setiap kombinasi variasi menurut untuk halaman yang dirender, tetapi menggunakan cache terdistribusi sehingga konsumsi memori dilepas dari server Web front-end.
Mulai Otomatis Aplikasi Web
Beberapa aplikasi Web perlu memuat data dalam jumlah besar atau melakukan pemrosesan inisialisasi yang mahal sebelum melayani permintaan pertama. Dalam versi ASP.NET sebelumnya, untuk situasi ini Anda harus menyusun pendekatan khusus untuk "membangunkan" aplikasi ASP.NET dan kemudian menjalankan kode inisialisasi selama metode Application_Load dalam Global.asax
file.
Fitur skalabilitas baru bernama auto-start yang secara langsung membahas skenario ini tersedia ketika ASP.NET 4 berjalan pada IIS 7.5 di Windows Server 2008 R2. Fitur mulai otomatis menyediakan pendekatan terkontrol untuk memulai kumpulan aplikasi, menginisialisasi aplikasi ASP.NET, lalu menerima permintaan HTTP.
Catatan
Modul Warm-Up Aplikasi IIS untuk IIS 7.5
Tim IIS telah merilis versi uji beta pertama dari Modul Warm-Up Aplikasi untuk IIS 7.5. Ini membuat pemanasan aplikasi Anda lebih mudah daripada yang dijelaskan sebelumnya. Alih-alih menulis kode kustom, Anda menentukan URL sumber daya yang akan dijalankan sebelum aplikasi Web menerima permintaan dari jaringan. Pemanasan ini terjadi selama startup layanan IIS (jika Anda mengonfigurasi kumpulan aplikasi IIS sebagai AlwaysRunning) dan ketika proses pekerja IIS didaur ulang. Selama daur ulang, proses pekerja IIS lama terus menjalankan permintaan sampai proses pekerja yang baru ditelurkan sepenuhnya dihangatkan, sehingga aplikasi tidak mengalami gangguan atau masalah lain karena cache yang tidak ditata. Perhatikan bahwa modul ini berfungsi dengan versi ASP.NET apa pun, dimulai dengan versi 2.0.
Untuk informasi selengkapnya, lihat Pemanasan Aplikasi di situs web IIS.net. Untuk panduan yang menggambarkan cara menggunakan fitur pemanasan, lihat Memulai Modul Warm-Up Aplikasi IIS 7.5 di situs web IIS.net.
Untuk menggunakan fitur mulai otomatis, administrator IIS mengatur kumpulan aplikasi di IIS 7.5 untuk dimulai secara otomatis dengan menggunakan konfigurasi berikut dalam applicationHost.config
file:
<applicationpools>
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationpools>
Karena satu kumpulan aplikasi dapat berisi beberapa aplikasi, Anda menentukan aplikasi individual yang akan dimulai secara otomatis dengan menggunakan konfigurasi berikut dalam applicationHost.config
file:
<sites>
<site name="MySite" id="1">
<application path="/"
serviceAutoStartEnabled="true"
serviceAutoStartProvider="PrewarmMyCache" >
<!-- Additional content -->
</application>
</site>
</sites>
<!-- Additional content -->
<serviceautostartproviders>
<add name="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</serviceautostartproviders>
Ketika server IIS 7.5 dimulai dingin atau ketika kumpulan aplikasi individual didaur ulang, IIS 7.5 menggunakan informasi dalam applicationHost.config
file untuk menentukan aplikasi Web mana yang perlu dimulai secara otomatis. Untuk setiap aplikasi yang ditandai untuk mulai otomatis, IIS7.5 mengirimkan permintaan ke ASP.NET 4 untuk memulai aplikasi dalam keadaan di mana aplikasi untuk sementara tidak menerima permintaan HTTP. Ketika dalam keadaan ini, ASP.NET membuat instans jenis yang ditentukan oleh atribut serviceAutoStartProvider (seperti yang ditunjukkan pada contoh sebelumnya) dan memanggil ke titik masuk publiknya.
Anda membuat jenis mulai otomatis terkelola dengan titik masuk yang diperlukan dengan menerapkan antarmuka IProcessHostPreloadClient , seperti yang ditunjukkan dalam contoh berikut:
public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Perform initialization.
}
}
Setelah kode inisialisasi Anda berjalan dalam metode Pramuat dan metode kembali, aplikasi ASP.NET siap untuk memproses permintaan.
Dengan penambahan mulai otomatis ke IIS .5 dan ASP.NET 4, Anda sekarang memiliki pendekatan yang terdefinisi dengan baik untuk melakukan inisialisasi aplikasi yang mahal sebelum memproses permintaan HTTP pertama. Misalnya, Anda dapat menggunakan fitur mulai otomatis baru untuk menginisialisasi aplikasi dan kemudian memberi sinyal load-balancer bahwa aplikasi diinisialisasi dan siap untuk menerima lalu lintas HTTP.
Mengalihkan Halaman Secara Permanen
Adalah praktik umum dalam aplikasi Web untuk memindahkan halaman dan konten lain dari waktu ke waktu, yang dapat menyebabkan akumulasi tautan kedaluarsa di mesin pencari. Dalam ASP.NET, pengembang telah menangani permintaan secara tradisional ke URL lama dengan menggunakan metode Response.Redirect untuk meneruskan permintaan ke URL baru. Namun, metode Pengalihan mengeluarkan respons HTTP 302 Found (pengalihan sementara), yang menghasilkan perjalanan pulang pergi HTTP tambahan ketika pengguna mencoba mengakses URL lama.
ASP.NET 4 menambahkan metode pembantu RedirectPermanent baru yang memudahkan untuk mengeluarkan respons HTTP 301 Moved Permanently, seperti dalam contoh berikut:
RedirectPermanent("/newpath/foroldcontent.aspx");
Mesin pencari dan agen pengguna lain yang mengenali pengalihan permanen akan menyimpan URL baru yang terkait dengan konten, yang menghilangkan perjalanan pulang pergi yang tidak perlu yang dibuat oleh browser untuk pengalihan sementara.
Menyusutkan Status Sesi
ASP.NET menyediakan dua opsi default untuk menyimpan status sesi di seluruh farm Web: penyedia keadaan sesi yang memanggil server keadaan sesi di luar proses, dan penyedia keadaan sesi yang menyimpan data dalam database Microsoft SQL Server. Karena kedua opsi melibatkan penyimpanan informasi status di luar proses pekerja aplikasi Web, status sesi harus diserialisasikan sebelum dikirim ke penyimpanan jarak jauh. Tergantung pada berapa banyak informasi yang disimpan pengembang dalam keadaan sesi, ukuran data berseri dapat tumbuh cukup besar.
ASP.NET 4 memperkenalkan opsi kompresi baru untuk kedua jenis penyedia keadaan sesi di luar proses. Ketika opsi konfigurasi compressionEnabled yang ditampilkan dalam contoh berikut diatur ke true, ASP.NET akan memadatkan (dan mendekompresi) status sesi berseri dengan menggunakan kelas .NET Framework System.IO.Compression.GZipStream.
<sessionState
mode="SqlServer"
sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate"
allowCustomSqlDatabase="true"
compressionEnabled="true"
/>
Dengan penambahan sederhana atribut baru ke Web.config
file, aplikasi dengan siklus CPU cadangan di server Web dapat mewujudkan pengurangan substansial dalam ukuran data keadaan sesi berseri.
Memperluas Rentang URL yang Diizinkan
ASP.NET 4 memperkenalkan opsi baru untuk memperluas ukuran URL aplikasi. Versi sebelumnya dari ASP.NET panjang jalur URL yang dibatasi hingga 260 karakter, berdasarkan batas jalur file NTFS. Di ASP.NET 4, Anda memiliki opsi untuk meningkatkan (atau mengurangi) batas ini yang sesuai untuk aplikasi Anda, menggunakan dua atribut konfigurasi httpRuntime baru. Contoh berikut menunjukkan atribut baru ini.
<httpRuntime maxUrlLength="260" maxQueryStringLength="2048" />
Untuk mengizinkan jalur yang lebih panjang atau lebih pendek (bagian URL yang tidak menyertakan protokol, nama server, dan string kueri), ubah atribut maxUrlLength . Untuk mengizinkan string kueri yang lebih panjang atau lebih pendek, ubah nilai atribut maxQueryStringLength .
ASP.NET 4 juga memungkinkan Anda mengonfigurasi karakter yang digunakan oleh pemeriksaan karakter URL. Ketika ASP.NET menemukan karakter yang tidak valid di bagian jalur URL, ia menolak permintaan dan mengeluarkan kesalahan HTTP 400. Dalam versi ASP.NET sebelumnya, pemeriksaan karakter URL dibatasi pada sekumpulan karakter tetap. Di ASP.NET 4, Anda dapat menyesuaikan sekumpulan karakter yang valid menggunakan atribut requestPathInvalidCharacters baru dari elemen konfigurasi httpRuntime , seperti yang ditunjukkan dalam contoh berikut:
<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
Secara default, atribut requestPathInvalidCharacters mendefinisikan delapan karakter sebagai tidak valid. (Dalam string yang ditetapkan ke requestPathInvalidCharacters secara default, karakter kurang dari (<), lebih besar dari (>), dan ampersand (&) dikodekan, karena Web.config
file adalah file XML.) Anda dapat menyesuaikan sekumpulan karakter yang tidak valid sesuai kebutuhan.
Catatan
Perhatikan ASP.NET 4 selalu menolak jalur URL yang berisi karakter dalam rentang 0X00 ASCII hingga 0x1F, karena itu adalah karakter URL yang tidak valid seperti yang didefinisikan dalam RFC 2396 dari IETF (http://www.ietf.org/rfc/rfc2396.txt). Pada versi Windows Server yang menjalankan IIS 6 atau lebih tinggi, driver perangkat protokol http.sys secara otomatis menolak URL dengan karakter ini.
Validasi Permintaan yang Dapat Diperluas
ASP.NET meminta validasi mencari data permintaan HTTP masuk untuk string yang umumnya digunakan dalam serangan scripting lintas situs (XSS). Jika string XSS potensial ditemukan, validasi permintaan menandai string tersangka dan mengembalikan kesalahan. Validasi permintaan bawaan mengembalikan kesalahan hanya ketika menemukan string yang paling umum digunakan dalam serangan XSS. Upaya sebelumnya untuk membuat validasi XSS lebih agresif menghasilkan terlalu banyak positif palsu. Namun, pelanggan mungkin ingin meminta validasi yang lebih agresif, atau sebaliknya mungkin ingin dengan sengaja melonggarkan pemeriksaan XSS untuk halaman tertentu atau untuk jenis permintaan tertentu.
Di ASP.NET 4, fitur validasi permintaan telah diperluas sehingga Anda dapat menggunakan logika validasi permintaan kustom. Untuk memperpanjang validasi permintaan, Anda membuat kelas yang berasal dari jenis System.Web.Util.RequestValidator baru, dan Anda mengonfigurasi aplikasi (di bagian Web.config
httpRuntime file) untuk menggunakan jenis kustom. Contoh berikut menunjukkan cara mengonfigurasi kelas validasi permintaan kustom:
<httpRuntime requestValidationType="Samples.MyValidator, Samples" />
Atribut requestValidationType baru memerlukan string pengidentifikasi jenis .NET Framework standar yang menentukan kelas yang menyediakan validasi permintaan kustom. Untuk setiap permintaan, ASP.NET memanggil jenis kustom untuk memproses setiap bagian data permintaan HTTP masuk. URL masuk, semua header HTTP (cookie dan header kustom), dan isi entitas semuanya tersedia untuk diperiksa oleh kelas validasi permintaan kustom seperti yang ditunjukkan dalam contoh berikut:
public class CustomRequestValidation : RequestValidator
{
protected override bool IsValidRequestString(
HttpContext context, string value,
RequestValidationSource requestValidationSource,
string collectionKey,
out int validationFailureIndex)
{...}
}
Untuk kasus di mana Anda tidak ingin memeriksa sepotong data HTTP masuk, kelas validasi permintaan dapat kembali untuk membiarkan validasi permintaan default ASP.NET berjalan hanya dengan memanggil basis. IsValidRequestString.
Ekstensibilitas Penembolokan Objek dan Penembolokan Objek
Sejak rilis pertamanya, ASP.NET telah menyertakan cache objek dalam memori yang kuat (System.Web.Caching.Cache). Implementasi cache telah sangat populer sehingga telah digunakan dalam aplikasi non-Web. Namun, canggung bagi aplikasi Formulir Windows atau WPF untuk menyertakan referensi System.Web.dll
hanya untuk dapat menggunakan cache objek ASP.NET.
Untuk membuat penembolokan tersedia untuk semua aplikasi, .NET Framework 4 memperkenalkan rakitan baru, namespace baru, beberapa jenis dasar, dan implementasi penembolokan konkret. Rakitan baru System.Runtime.Caching.dll
berisi API penembolokan baru di namespace System.Runtime.Caching . Namespace berisi dua set inti kelas:
- Jenis abstrak yang menyediakan fondasi untuk membangun semua jenis implementasi cache kustom.
- Implementasi cache objek dalam memori konkret (kelas System.Runtime.Caching.MemoryCache ).
Kelas MemoryCache baru dimodelkan dengan cermat pada cache ASP.NET, dan berbagi banyak logika mesin cache internal dengan ASP.NET. Meskipun API penembolokan publik di System.Runtime.Caching telah diperbarui untuk mendukung pengembangan cache kustom, jika Anda telah menggunakan objek ASP.NET Cache , Anda akan menemukan konsep yang sudah dikenal di API baru.
Diskusi mendalam tentang kelas MemoryCache baru dan API dasar pendukung akan memerlukan seluruh dokumen. Namun, contoh berikut memberi Anda gambaran tentang cara kerja API cache baru. Contohnya ditulis untuk aplikasi Formulir Windows, tanpa dependensi apa pun pada System.Web.dll
.
private void btnGet_Click(object sender, EventArgs e)
{
//Obtain a reference to the default MemoryCache instance.
//Note that you can create multiple MemoryCache(s) inside
//of a single application.
ObjectCache cache = MemoryCache.Default;
//In this example the cache is storing the contents of a file string
fileContents = cache["filecontents"] as string;
//If the file contents are not currently in the cache, then
//the contents are read from disk and placed in the cache.
if (fileContents == null)
{
//A CacheItemPolicy object holds all the pieces of cache
//dependency and cache expiration metadata related to a single
//cache entry.
CacheItemPolicy policy = new CacheItemPolicy();
//Build up the information necessary to create a file dependency.
//In this case we just need the file path of the file on disk.
List filePaths = new List();
filePaths.Add("c:\\data.txt");
//In the new cache API, dependencies are called "change monitors".
//For this example we want the cache entry to be automatically expired
//if the contents on disk change. A HostFileChangeMonitor provides
//this functionality.
policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
//Fetch the file's contents
fileContents = File.ReadAllText("c:\\data.txt");
//And then store the file's contents in the cache
cache.Set("filecontents", fileContents, policy);
}
MessageBox.Show(fileContents);
}
Html, URL, dan Pengodean Header HTTP yang dapat diperluas
Di ASP.NET 4, Anda bisa membuat rutinitas pengodean kustom untuk tugas pengodean teks umum berikut:
- Pengodean HTML.
- Pengodean URL.
- Pengodean atribut HTML.
- Mengodekan header HTTP keluar.
Anda dapat membuat encoder kustom dengan berasal dari jenis System.Web.Util.HttpEncoder baru lalu mengonfigurasi ASP.NET untuk menggunakan jenis kustom di bagian Web.config
httpRuntime file, seperti yang ditunjukkan dalam contoh berikut:
<httpRuntime encoderType="Samples.MyCustomEncoder, Samples" />
Setelah encoder kustom dikonfigurasi, ASP.NET secara otomatis memanggil implementasi pengodean kustom setiap kali metode pengodean publik kelas System.Web.HttpUtility atau System.Web.HttpServerUtility dipanggil. Ini memungkinkan salah satu bagian dari tim pengembangan Web membuat encoder kustom yang mengimplementasikan pengodean karakter agresif, sementara tim pengembangan Web lainnya terus menggunakan API pengodean ASP.NET publik. Dengan mengonfigurasi encoder kustom secara terpusat dalam elemen httpRuntime , Anda dijamin bahwa semua panggilan pengodean teks dari API pengodean ASP.NET publik dirutekan melalui encoder kustom.
Pemantauan Performa untuk Aplikasi Individu dalam Satu Proses Pekerja
Untuk meningkatkan jumlah situs Web yang dapat dihosting di satu server, banyak hoster menjalankan beberapa aplikasi ASP.NET dalam satu proses pekerja. Namun, jika beberapa aplikasi menggunakan satu proses pekerja bersama, sulit bagi administrator server untuk mengidentifikasi aplikasi individual yang mengalami masalah.
ASP.NET 4 memanfaatkan fungsionalitas pemantauan sumber daya baru yang diperkenalkan oleh CLR. Untuk mengaktifkan fungsionalitas ini, Anda dapat menambahkan cuplikan konfigurasi XML berikut ke aspnet.config
file konfigurasi.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<runtime>
<appDomainResourceMonitoring enabled="true"/>
</runtime>
</configuration>
Catatan
Catatan File aspnet.config
berada di direktori tempat .NET Framework diinstal. Ini bukan Web.config
file.
Ketika fitur appDomainResourceMonitoring telah diaktifkan, dua penghitung kinerja baru tersedia dalam kategori performa "aplikasi ASP.NET": % Waktu Prosesor Terkelola dan Memori Terkelola yang Digunakan. Kedua penghitung kinerja ini menggunakan fitur manajemen sumber daya domain aplikasi CLR baru untuk melacak perkiraan waktu CPU dan pemanfaatan memori terkelola aplikasi ASP.NET individu. Akibatnya, dengan ASP.NET 4, administrator sekarang memiliki pandangan yang lebih terperinci tentang konsumsi sumber daya aplikasi individual yang berjalan dalam satu proses pekerja.
Multi-Penargetan
Anda dapat membuat aplikasi yang menargetkan versi .NET Framework tertentu. Di ASP.NET 4, atribut baru dalam elemen Web.config
kompilasi file memungkinkan Anda menargetkan .NET Framework 4 dan yang lebih baru. Jika Anda secara eksplisit menargetkan .NET Framework 4, dan jika Anda menyertakan elemen opsional dalam Web.config
file seperti entri untuk system.codedom, elemen-elemen ini harus benar untuk .NET Framework 4. (Jika Anda tidak secara eksplisit menargetkan .NET Framework 4, kerangka kerja target disimpulkan dari kurangnya entri dalam Web.config
file.)
Contoh berikut menunjukkan penggunaan atribut targetFramework dalam elemen Web.config
kompilasi file.
<compilation targetFramework="4.0"/>
Perhatikan hal berikut tentang menargetkan versi .NET Framework tertentu:
- Dalam kumpulan aplikasi .NET Framework 4, sistem build ASP.NET mengasumsikan .NET Framework 4 sebagai target jika
Web.config
file tidak menyertakan atribut targetFramework atau jikaWeb.config
file hilang. (Anda mungkin harus membuat perubahan pengkodan pada aplikasi Anda untuk membuatnya berjalan di bawah .NET Framework 4.) - Jika Anda menyertakan atribut targetFramework, dan jika elemen system.codeDom ditentukan dalam
Web.config
file, file ini harus berisi entri yang benar untuk .NET Framework 4. - Jika Anda menggunakan perintah aspnet_compiler untuk melakukan prakompeksi aplikasi Anda (seperti di lingkungan build), Anda harus menggunakan versi perintah aspnet_compiler yang benar untuk kerangka kerja target. Gunakan pengkompilasi yang dikirim dengan .NET Framework 2.0 (%WINDIR%\Microsoft.NET\Framework\v2.0.50727) untuk mengkompilasi .NET Framework 3.5 dan versi yang lebih lama. Gunakan pengkompilasi yang dikirim dengan .NET Framework 4 untuk mengkompilasi aplikasi yang dibuat menggunakan kerangka kerja tersebut atau menggunakan versi yang lebih baru.
- Pada durasi, pengkompilasi menggunakan rakitan kerangka kerja terbaru yang diinstal pada komputer (dan karenanya di GAC). Jika pembaruan dibuat nanti ke kerangka kerja (misalnya, versi hipotetis 4.1 diinstal), Anda akan dapat menggunakan fitur dalam versi kerangka kerja yang lebih baru meskipun atribut targetFramework menargetkan versi yang lebih rendah (seperti 4.0). (Namun, pada waktu desain di Visual Studio 2010 atau saat Anda menggunakan perintah aspnet_compiler , menggunakan fitur kerangka kerja yang lebih baru akan menyebabkan kesalahan kompilator).
Ajax
jQuery Disertakan dengan Formulir Web dan MVC
Templat Visual Studio untuk Formulir Web dan MVC menyertakan pustaka jQuery sumber terbuka. Saat Anda membuat situs web atau proyek baru, folder Skrip yang berisi 3 file berikut dibuat:
- jQuery-1.4.1.js – Versi pustaka jQuery yang dapat dibaca manusia dan tidak diminifikasi.
- jQuery-14.1.min.js – Versi minifikasi pustaka jQuery.
- jQuery-1.4.1-vsdoc.js – File dokumentasi Intellisense untuk pustaka jQuery.
Sertakan versi jQuery yang tidak diminifikasi saat mengembangkan aplikasi. Sertakan versi minified jQuery untuk aplikasi produksi.
Misalnya, halaman Formulir Web berikut ini menggambarkan bagaimana Anda dapat menggunakan jQuery untuk mengubah warna latar belakang kontrol ASP.NET TextBox menjadi kuning saat mereka memiliki fokus.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowjQuery.aspx.cs" Inherits="ShowjQuery" %>
<!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>Show jQuery</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtFirstName" runat="server" />
<br />
<asp:TextBox ID="txtLastName" runat="server" />
</div>
</form>
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
$("input").focus( function() { $(this).css("background-color", "yellow"); });
</script>
</body>
</html>
Dukungan Content Delivery Network
Microsoft Ajax Content Delivery Network (CDN) memungkinkan Anda untuk dengan mudah menambahkan skrip Ajax dan jQuery ASP.NET ke aplikasi Web Anda. Misalnya, Anda dapat mulai menggunakan pustaka jQuery hanya dengan menambahkan <script>
tag ke halaman Anda yang menunjuk ke Ajax.microsoft.com seperti ini:
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script>
Dengan memanfaatkan Microsoft Ajax CDN, Anda dapat secara signifikan meningkatkan performa aplikasi Ajax Anda. Konten Microsoft Ajax CDN di-cache di server yang terletak di seluruh dunia. Selain itu, MICROSOFT Ajax CDN memungkinkan browser untuk menggunakan kembali file JavaScript yang di-cache untuk situs Web yang terletak di domain yang berbeda.
Microsoft Ajax Content Delivery Network mendukung SSL (HTTPS) jika Anda perlu melayani halaman web menggunakan Lapisan Soket Aman.
Terapkan fallback ketika CDN tidak tersedia. Uji fallback.
Untuk mempelajari selengkapnya tentang MICROSOFT Ajax CDN, kunjungi situs web berikut:
https://www.asp.net/ajaxlibrary/CDN.ashx
ASP.NET ScriptManager mendukung MICROSOFT Ajax CDN. Cukup dengan mengatur satu properti, properti EnableCdn, Anda dapat mengambil semua file JavaScript kerangka kerja ASP.NET dari CDN:
<asp:ScriptManager ID="sm1" EnableCdn="true" runat="server" />
Setelah Anda mengatur properti EnableCdn ke nilai true, kerangka kerja ASP.NET akan mengambil semua file JavaScript kerangka kerja ASP.NET dari CDN termasuk semua file JavaScript yang digunakan untuk validasi dan UpdatePanel. Mengatur properti yang satu ini dapat berdampak dramatis pada performa aplikasi web Anda.
Anda dapat mengatur jalur CDN untuk file JavaScript Anda sendiri dengan menggunakan atribut WebResource. Properti CdnPath baru menentukan jalur ke CDN yang digunakan saat Anda mengatur properti EnableCdn ke nilai true:
[assembly: WebResource("Foo.js", "application/x-javascript", CdnPath = "http://foo.com/foo/bar/foo.js")]
Skrip Eksplisit ScriptManager
Di masa lalu, jika Anda menggunakan ASP.NET ScriptManger maka Anda diharuskan memuat seluruh Pustaka Ajax ASP.NET monolitik. Dengan memanfaatkan properti ScriptManager.AjaxFrameworkMode baru, Anda dapat mengontrol dengan tepat komponen pustaka ASP.NET Ajax yang dimuat dan hanya memuat komponen pustaka ASP.NET Ajax yang Anda butuhkan.
Properti ScriptManager.AjaxFrameworkMode dapat diatur ke nilai berikut:
- Diaktifkan -- Menentukan bahwa kontrol ScriptManager secara otomatis menyertakan file skrip MicrosoftAjax.js, yang merupakan file skrip gabungan dari setiap skrip kerangka kerja inti (perilaku warisan).
- Dinonaktifkan -- Menentukan bahwa semua fitur skrip Microsoft Ajax dinonaktifkan dan kontrol ScriptManager tidak mereferensikan skrip apa pun secara otomatis.
- Eksplisit -- Menentukan bahwa Anda akan secara eksplisit menyertakan referensi skrip ke file skrip inti kerangka kerja individual yang diperlukan halaman Anda, dan bahwa Anda akan menyertakan referensi ke dependensi yang diperlukan setiap file skrip.
Misalnya, jika Anda mengatur properti AjaxFrameworkMode ke nilai Eksplisit maka Anda dapat menentukan skrip komponen Ajax ASP.NET tertentu yang Anda butuhkan:
<asp:ScriptManager ID="sm1" AjaxFrameworkMode="Explicit" runat="server">
<Scripts>
<asp:ScriptReference Name="MicrosoftAjaxCore.js" />
<asp:ScriptReference Name="MicrosoftAjaxComponentModel.js" />
<asp:ScriptReference Name="MicrosoftAjaxSerialization.js" />
<asp:ScriptReference Name="MicrosoftAjaxNetwork.js" />
</Scripts>
</asp:ScriptManager>
Formulir Web
Formulir Web telah menjadi fitur inti dalam ASP.NET sejak rilis ASP.NET 1.0. Banyak penyempurnaan telah berada di area ini untuk ASP.NET 4, termasuk yang berikut:
- Kemampuan untuk mengatur tag meta .
- Kontrol lebih atas status tampilan.
- Cara yang lebih mudah untuk bekerja dengan kemampuan browser.
- Dukungan untuk menggunakan perutean ASP.NET dengan Formulir Web.
- Kontrol lebih atas ID yang dihasilkan.
- Kemampuan untuk mempertahankan baris yang dipilih dalam kontrol data.
- Kontrol lebih atas HTML yang dirender di kontrol FormView dan ListView .
- Memfilter dukungan untuk kontrol sumber data.
Mengatur Tag Meta dengan Properti Page.MetaKeywords dan Page.MetaDescription
ASP.NET 4 menambahkan dua properti ke kelas Halaman , MetaKeywords dan MetaDescription. Kedua properti ini mewakili tag meta terkait di halaman Anda, seperti yang diperlihatkan dalam contoh berikut:
<head id="Head1" runat="server">
<title>Untitled Page</title>
<meta name="keywords" content="These, are, my, keywords" />
<meta name="description" content="This is the description of my page" />
</head>
Kedua properti ini berfungsi dengan cara yang sama seperti properti Judul halaman. Mereka mengikuti aturan ini:
- Jika tidak ada tag meta dalam elemen head yang cocok dengan nama properti (yaitu, name="keywords" untuk Page.MetaKeywords dan name="description" untuk Page.MetaDescription, yang berarti bahwa properti ini belum diatur), tag meta akan ditambahkan ke halaman saat dirender.
- Jika sudah ada tag meta dengan nama-nama ini, properti ini bertindak sebagai mendapatkan dan mengatur metode untuk konten tag yang ada.
Anda dapat mengatur properti ini pada durasi, yang memungkinkan Anda mendapatkan konten dari database atau sumber lain, dan yang memungkinkan Anda mengatur tag secara dinamis untuk menjelaskan untuk apa halaman tertentu.
Anda juga bisa mengatur properti Kata Kunci dan Deskripsi di direktif Halaman @ di bagian atas markup halaman Formulir Web, seperti dalam contoh berikut:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs"
Inherits="_Default"
Keywords="These, are, my, keywords"
Description="This is a description" %>
Ini akan mengambil alih konten tag meta (jika ada) yang sudah dideklarasikan di halaman.
Konten tag meta deskripsi digunakan untuk meningkatkan pratinjau daftar penelusuran di Google. (Untuk detailnya, lihat Meningkatkan cuplikan dengan makeover deskripsi meta di blog Google Webmaster Central.) Google dan Windows Live Search tidak menggunakan konten kata kunci untuk apa pun, tetapi mesin pencari lainnya mungkin.
Properti baru ini adalah fitur sederhana, tetapi mereka menyelamatkan Anda dari persyaratan untuk menambahkan ini secara manual atau dari menulis kode Anda sendiri untuk membuat tag meta .
Mengaktifkan Status Tampilan untuk Kontrol Individual
Secara default, status tampilan diaktifkan untuk halaman, dengan hasil bahwa setiap kontrol pada halaman berpotensi menyimpan status tampilan meskipun tidak diperlukan untuk aplikasi. Lihat data status disertakan dalam markup yang dihasilkan halaman dan meningkatkan jumlah waktu yang diperlukan untuk mengirim halaman ke klien dan mempostingnya kembali. Menyimpan lebih banyak status tampilan daripada yang diperlukan dapat menyebabkan penurunan performa yang signifikan. Dalam versi ASP.NET sebelumnya, pengembang dapat menonaktifkan status tampilan untuk kontrol individual untuk mengurangi ukuran halaman, tetapi harus melakukannya secara eksplisit untuk kontrol individual. Di ASP.NET 4, kontrol server Web menyertakan properti ViewStateMode yang memungkinkan Anda menonaktifkan status tampilan secara default lalu mengaktifkannya hanya untuk kontrol yang memerlukannya di halaman.
Properti ViewStateMode mengambil enumerasi yang memiliki tiga nilai: Diaktifkan, Dinonaktifkan, dan Warisan. Diaktifkan memungkinkan status tampilan untuk kontrol tersebut dan untuk kontrol turunan apa pun yang diatur ke Warisan atau yang tidak memiliki apa pun yang diatur. Nonaktif menonaktifkan status tampilan, dan Warisi menentukan bahwa kontrol menggunakan pengaturan ViewStateMode dari kontrol induk.
Contoh berikut menunjukkan cara kerja properti ViewStateMode . Markup dan kode untuk kontrol di halaman berikut ini menyertakan nilai untuk properti ViewStateMode :
<form id="form1" runat="server">
<script runat="server">
protected override void OnLoad(EventArgs e) {
if (!IsPostBack) {
label1.Text = label2.Text = "[DynamicValue]";
}
base.OnLoad(e);
}
</script>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Disabled">
Disabled: <asp:Label ID="label1" runat="server" Text="[DeclaredValue]" /><br />
<asp:PlaceHolder ID="PlaceHolder2" runat="server" ViewStateMode="Enabled">
Enabled: <asp:Label ID="label2" runat="server" Text="[DeclaredValue]" />
</asp:PlaceHolder>
</asp:PlaceHolder>
<hr />
<asp:button ID="Button1" runat="server" Text="Postback" />
<%-- Further markup here --%>
Seperti yang Anda lihat, kode menonaktifkan status tampilan untuk kontrol PlaceHolder1. Kontrol label1 turunan mewarisi nilai properti ini (Pewarisan adalah nilai default untuk ViewStateMode untuk kontrol.) dan karenanya tidak menyimpan status tampilan. Di kontrol PlaceHolder2, ViewStateMode diatur ke Diaktifkan, sehingga label2 mewarisi properti ini dan menyimpan status tampilan. Saat halaman pertama kali dimuat, properti Teks dari kedua kontrol Label diatur ke string "[DynamicValue]".
Efek dari pengaturan ini adalah bahwa ketika halaman dimuat pertama kali, output berikut ditampilkan di browser:
Tamu penyandang cacat : [DynamicValue]
Diaktifkan:[DynamicValue]
Namun, setelah postback, output berikut ditampilkan:
Tamu penyandang cacat : [DeclaredValue]
Diaktifkan:[DynamicValue]
Kontrol label1 (yang nilai ViewStateMode-nya diatur ke Dinonaktifkan) belum mempertahankan nilai yang diatur ke dalam kode. Namun, kontrol label2 (yang nilai ViewStateMode-nya diatur ke Diaktifkan) telah mempertahankan statusnya.
Anda juga bisa mengatur ViewStateMode di direktif @ Halaman , seperti dalam contoh berikut:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs"
Inherits="WebApplication1._Default"
ViewStateMode="Disabled" %>
Kelas Halaman hanyalah kontrol lain; ini bertindak sebagai kontrol induk untuk semua kontrol lain di halaman. Nilai default ViewStateModeDiaktifkan untuk instans Halaman. Karena kontrol default ke Warisi, kontrol akan mewarisi nilai properti Diaktifkan kecuali Anda mengatur ViewStateMode di tingkat halaman atau kontrol.
Nilai properti ViewStateMode menentukan apakah status tampilan dipertahankan hanya jika properti EnableViewState diatur ke true. Jika properti EnableViewState diatur ke false, status tampilan tidak akan dipertahankan meskipun ViewStateMode diatur ke Diaktifkan.
Penggunaan yang baik untuk fitur ini adalah dengan kontrol ContentPlaceHolder di halaman master, di mana Anda dapat mengatur ViewStateMode ke Dinonaktifkan untuk halaman master lalu mengaktifkannya satu per satu untuk kontrol ContentPlaceHolder yang pada gilirannya berisi kontrol yang memerlukan status tampilan.
Perubahan pada Kapabilitas Browser
ASP.NET menentukan kemampuan browser yang digunakan pengguna untuk menelusuri situs Anda dengan menggunakan fitur yang disebut kemampuan browser. Kemampuan browser diwakili oleh objek HttpBrowserCapabilities (diekspos oleh properti Request.Browser ). Misalnya, Anda dapat menggunakan objek HttpBrowserCapabilities untuk menentukan apakah jenis dan versi browser saat ini mendukung versi JavaScript tertentu. Atau, Anda dapat menggunakan objek HttpBrowserCapabilities untuk menentukan apakah permintaan berasal dari perangkat seluler.
Objek HttpBrowserCapabilities didorong oleh sekumpulan file definisi browser. File-file ini berisi informasi tentang kemampuan browser tertentu. Dalam ASP.NET 4, file definisi browser ini telah diperbarui untuk berisi informasi tentang browser dan perangkat yang baru diperkenalkan seperti Google Chrome, Riset di ponsel cerdas Motion BlackBerry, dan Apple iPhone.
Daftar berikut ini memperlihatkan file definisi browser baru:
- blackberry.browser
- chrome.browser
- Default.browser
- firefox.browser
- gateway.browser
- generic.browser
- ie.browser
- iemobile.browser
- iphone.browser
- opera.browser
- safari.browser
Menggunakan Penyedia Kemampuan Browser
Dalam ASP.NET versi 3.5 Paket Layanan 1, Anda dapat menentukan kemampuan yang dimiliki browser dengan cara berikut:
Di tingkat komputer, Anda membuat atau memperbarui
.browser
file XML di folder berikut:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers
Setelah menentukan kemampuan browser, Anda menjalankan perintah berikut dari Perintah Visual Studio untuk membangun kembali rakitan kemampuan browser dan menambahkannya ke GAC:
aspnet_regbrowsers.exe -I c
Untuk aplikasi individual, Anda membuat
.browser
file di folder aplikasiApp_Browsers
.
Pendekatan ini mengharuskan Anda mengubah file XML, dan untuk perubahan tingkat komputer, Anda harus memulai ulang aplikasi setelah menjalankan proses aspnet_regbrowsers.exe.
ASP.NET 4 menyertakan fitur yang disebut sebagai penyedia kemampuan browser. Seperti namanya, ini memungkinkan Anda membangun penyedia yang pada gilirannya memungkinkan Anda menggunakan kode Anda sendiri untuk menentukan kemampuan browser.
Dalam praktiknya, pengembang sering kali tidak menentukan kemampuan browser kustom. File browser sulit diperbarui, proses untuk memperbaruinya cukup rumit, dan sintaks XML untuk .browser
file bisa rumit untuk digunakan dan didefinisikan. Apa yang akan membuat proses ini jauh lebih mudah adalah jika ada sintaks definisi browser umum, atau database yang berisi definisi browser terbaru, atau bahkan layanan Web untuk database tersebut. Fitur penyedia kemampuan browser baru memungkinkan skenario ini dan praktis untuk pengembang pihak ketiga.
Ada dua pendekatan utama untuk menggunakan fitur penyedia kemampuan browser ASP.NET 4 baru: memperluas fungsi definisi kemampuan browser ASP.NET, atau menggantinya sepenuhnya. Bagian berikut menjelaskan terlebih dahulu cara mengganti fungsionalitas, lalu cara memperluasnya.
Mengganti Fungsionalitas Kemampuan Browser ASP.NET
Untuk mengganti fungsionalitas definisi kemampuan browser ASP.NET sepenuhnya, ikuti langkah-langkah berikut:
Buat kelas penyedia yang berasal dari HttpCapabilitiesProvider dan yang mengambil alih metode GetBrowserCapabilities , seperti dalam contoh berikut:
public class CustomProvider : HttpCapabilitiesProvider { public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request) { HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities(); Hashtable values = new Hashtable(180, StringComparer.OrdinalIgnoreCase); values[String.Empty] = request.UserAgent; values["browser"] = "MyCustomBrowser"; browserCaps.Capabilities = values; return browserCaps; } }
Kode dalam contoh ini membuat objek HttpBrowserCapabilities baru, hanya menentukan kemampuan bernama browser dan mengatur kemampuan tersebut ke MyCustomBrowser.
Daftarkan penyedia dengan aplikasi.
Untuk menggunakan penyedia dengan aplikasi, Anda harus menambahkan atribut penyedia ke bagian browserCaps di
Web.config
file atauMachine.config
. (Anda juga dapat menentukan atribut penyedia dalam elemen lokasi untuk direktori tertentu dalam aplikasi, seperti di folder untuk perangkat seluler tertentu.) Contoh berikut menunjukkan cara mengatur atribut penyedia dalam file konfigurasi:<system.web> <browserCaps provider="ClassLibrary2.CustomProvider, ClassLibrary2, Version=1.0.0.0, Culture=neutral" /> </system.web>
Cara lain untuk mendaftarkan definisi kemampuan browser baru adalah dengan menggunakan kode, seperti yang ditunjukkan dalam contoh berikut:
void Application_Start(object sender, EventArgs e) { HttpCapabilitiesBase.BrowserCapabilitiesProvider = new ClassLibrary2.CustomProvider(); // ... }
Kode ini harus berjalan dalam peristiwa
Global.asax
Application_Start file. Setiap perubahan pada kelas BrowserCapabilitiesProvider harus terjadi sebelum kode apa pun dalam aplikasi dijalankan, untuk memastikan bahwa cache tetap dalam status valid untuk objek HttpCapabilitiesBase yang diselesaikan.
Penembolokan Objek HttpBrowserCapabilities
Contoh sebelumnya memiliki satu masalah, yaitu kode akan berjalan setiap kali penyedia kustom dipanggil untuk mendapatkan objek HttpBrowserCapabilities . Ini dapat terjadi beberapa kali selama setiap permintaan. Dalam contoh, kode untuk penyedia tidak melakukan banyak hal. Namun, jika kode di penyedia kustom Anda melakukan pekerjaan yang signifikan untuk mendapatkan objek HttpBrowserCapabilities , ini dapat memengaruhi performa. Untuk mencegah hal ini terjadi, Anda dapat menyimpan cache objek HttpBrowserCapabilities . Ikuti langkah-langkah berikut:
Buat kelas yang berasal dari HttpCapabilitiesProvider, seperti kelas dalam contoh berikut:
public class CustomProvider : HttpCapabilitiesProvider { public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request) { string cacheKey = BuildCacheKey(); int cacheTime = GetCacheTime(); HttpBrowserCapabilities browserCaps = HttpContext.Current.Cache[cacheKey] as HttpBrowserCapabilities; if (browserCaps == null) { HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities(); Hashtable values = new Hashtable(180, StringComparer.OrdinalIgnoreCase); values[String.Empty] = request.UserAgent; values["browser"] = "MyCustomBrowser"; browserCaps.Capabilities = values; HttpContext.Current.Cache.Insert(cacheKey, browserCaps, null, DateTime.MaxValue, TimeSpan.FromSeconds(cacheTime)); } return browserCaps; } }
Dalam contoh, kode menghasilkan kunci cache dengan memanggil metode BuildCacheKey kustom, dan mendapatkan lamanya waktu untuk cache dengan memanggil metode GetCacheTime kustom. Kode kemudian menambahkan objek HttpBrowserCapabilities yang diselesaikan ke cache. Objek dapat diambil dari cache dan digunakan kembali pada permintaan berikutnya yang menggunakan penyedia kustom.
Daftarkan penyedia dengan aplikasi seperti yang dijelaskan dalam prosedur sebelumnya.
Memperluas Fungsionalitas Kemampuan Browser ASP.NET
Bagian sebelumnya menjelaskan cara membuat objek HttpBrowserCapabilities baru di ASP.NET 4. Anda juga dapat memperluas fungsionalitas kemampuan browser ASP.NET dengan menambahkan definisi kemampuan browser baru ke yang sudah ada di ASP.NET. Anda dapat melakukan ini tanpa menggunakan definisi browser XML. Prosedur berikut menunjukkan caranya.
Buat kelas yang berasal dari HttpCapabilitiesEvaluator dan yang mengambil alih metode GetBrowserCapabilities , seperti yang ditunjukkan dalam contoh berikut:
public class CustomProvider : HttpCapabilitiesEvaluator { public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request) { HttpBrowserCapabilities browserCaps = base.GetHttpBrowserCapabilities(request); if (browserCaps.Browser == "Unknown") { browserCaps = MyBrowserCapabilitiesEvaulator(request); } return browserCaps; } }
Kode ini pertama-tama menggunakan fungsionalitas kemampuan browser ASP.NET untuk mencoba mengidentifikasi browser. Namun, jika tidak ada browser yang diidentifikasi berdasarkan informasi yang ditentukan dalam permintaan (yaitu, jika properti Browser objek HttpBrowserCapabilities adalah string "Tidak Diketahui"), kode memanggil penyedia kustom (MyBrowserCapabilitiesEvaluator) untuk mengidentifikasi browser.
Daftarkan penyedia dengan aplikasi seperti yang dijelaskan dalam contoh sebelumnya.
Memperluas Fungsionalitas Kemampuan Browser dengan Menambahkan Kemampuan Baru ke Definisi Kemampuan yang Ada
Selain membuat penyedia definisi browser kustom dan untuk membuat definisi browser baru secara dinamis, Anda dapat memperluas definisi browser yang ada dengan kemampuan tambahan. Ini memungkinkan Anda menggunakan definisi yang dekat dengan apa yang Anda inginkan tetapi hanya kurang beberapa kemampuan. Untuk melakukannya, gunakan langkah-langkah berikut.
Buat kelas yang berasal dari HttpCapabilitiesEvaluator dan yang mengambil alih metode GetBrowserCapabilities , seperti yang ditunjukkan dalam contoh berikut:
public class CustomProvider : HttpCapabilitiesEvaluator { public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request) { HttpBrowserCapabilities browserCaps = base.GetHttpBrowserCapabilities(request); if (browserCaps.Browser == "Unknown") { browserCaps = MyBrowserCapabilitiesEvaulator(request); } return browserCaps; } }
Contoh kode memperluas ASP.NET kelas HttpCapabilitiesEvaluator yang ada dan mendapatkan objek HttpBrowserCapabilities yang cocok dengan definisi permintaan saat ini dengan menggunakan kode berikut:
HttpBrowserCapabilities browserCaps = base.GetHttpBrowserCapabilities(request);
Kode kemudian dapat menambahkan atau memodifikasi kemampuan untuk browser ini. Ada dua cara untuk menentukan kemampuan browser baru:
Tambahkan pasangan kunci/nilai ke objek IDictionary yang diekspos oleh properti Kapabilitas objek HttpCapabilitiesBase . Dalam contoh sebelumnya, kode menambahkan kemampuan bernama MultiTouch dengan nilai true.
Atur properti objek HttpCapabilitiesBase yang ada. Dalam contoh sebelumnya, kode mengatur properti Bingkai ke true. Properti ini hanyalah pengakses untuk objek IDictionary yang diekspos oleh properti Kapabilitas .
Catatan
Catatan Model ini berlaku untuk properti HttpBrowserCapabilities apa pun, termasuk adaptor kontrol.
Daftarkan penyedia dengan aplikasi seperti yang dijelaskan dalam prosedur sebelumnya.
Perutean di ASP.NET 4
ASP.NET 4 menambahkan dukungan bawaan untuk menggunakan perutean dengan Formulir Web. Perutean memungkinkan Anda mengonfigurasi aplikasi untuk menerima URL permintaan yang tidak dipetakan ke file fisik. Sebagai gantinya, Anda dapat menggunakan perutean untuk menentukan URL yang bermakna bagi pengguna dan yang dapat membantu pengoptimalan mesin pencari (SEO) untuk aplikasi Anda. Misalnya, URL untuk halaman yang menampilkan kategori produk di aplikasi yang ada mungkin terlihat seperti contoh berikut:
http://website/products.aspx?categoryid=12
Dengan menggunakan perutean, Anda dapat mengonfigurasi aplikasi untuk menerima URL berikut untuk merender informasi yang sama:
http://website/products/software
Perutean telah tersedia dimulai dengan ASP.NET 3.5 SP1. (Untuk contoh cara menggunakan perutean di ASP.NET 3.5 SP1, lihat Menggunakan Perutean Dengan WebForms di blog Phil Haack.) Namun, ASP.NET 4 mencakup beberapa fitur yang memudahkan penggunaan perutean, termasuk yang berikut ini:
- Kelas PageRouteHandler , yang merupakan handler HTTP sederhana yang Anda gunakan saat menentukan rute. Kelas meneruskan data ke halaman tempat permintaan dirutekan.
- Properti baru HttpRequest.RequestContext dan Page.RouteData (yang merupakan proksi untuk objek HttpRequest.RequestContext.RouteData ). Properti ini memudahkan untuk mengakses informasi yang diteruskan dari rute.
- Penyusun ekspresi baru berikut, yang ditentukan dalam System.Web.Compilation.RouteUrlExpressionBuilder dan System.Web.Compilation.RouteValueExpressionBuilder:
- RouteUrl, yang menyediakan cara sederhana untuk membuat URL yang sesuai dengan URL rute dalam kontrol server ASP.NET.
- RouteValue, yang menyediakan cara sederhana untuk mengekstrak informasi dari objek RouteContext .
- Kelas RouteParameter , yang memudahkan untuk meneruskan data yang terdapat dalam objek RouteContext ke kueri untuk kontrol sumber data (mirip dengan FormParameter).
Perutean untuk Halaman Formulir Web
Contoh berikut menunjukkan cara menentukan rute Formulir Web dengan menggunakan metode MapPageRoute baru dari kelas Rute :
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapPageRoute("SearchRoute",
"search/{searchterm}", "~/search.aspx");
RouteTable.Routes.MapPageRoute("UserRoute",
"users/{username}", "~/users.aspx");
}
}
ASP.NET 4 memperkenalkan metode MapPageRoute . Contoh berikut setara dengan definisi SearchRoute yang diperlihatkan dalam contoh sebelumnya, tetapi menggunakan kelas PageRouteHandler .
RouteTable.Routes.Add("SearchRoute", new Route("search/{searchterm}",
new PageRouteHandler("~/search.aspx")));
Kode dalam contoh memetakan rute ke halaman fisik (di rute pertama, ke ~/search.aspx
). Definisi rute pertama juga menentukan bahwa parameter bernama searchterm harus diekstraksi dari URL dan diteruskan ke halaman.
Metode MapPageRoute mendukung metode overload berikut:
- MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess)
- MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, RouteValueDictionary defaults)
- MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, Default RouteValueDictionary, batasan RouteValueDictionary)
Parameter checkPhysicalUrlAccess menentukan apakah rute harus memeriksa izin keamanan untuk halaman fisik yang dirutekan ke (dalam hal ini, search.aspx) dan izin pada URL masuk (dalam hal ini, cari/{searchterm}). Jika nilai checkPhysicalUrlAccesssalah, hanya izin URL masuk yang akan diperiksa. Izin ini didefinisikan dalam Web.config
file menggunakan pengaturan seperti berikut ini:
<configuration>
<location path="search.aspx">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="search">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>
Dalam konfigurasi contoh, akses ditolak ke halaman search.aspx
fisik untuk semua pengguna kecuali mereka yang berada dalam peran admin. Ketika parameter checkPhysicalUrlAccess diatur ke true (yang merupakan nilai defaultnya), hanya pengguna admin yang diizinkan untuk mengakses URL /search/{searchterm}, karena halaman fisik search.aspx dibatasi untuk pengguna dalam peran tersebut. Jika checkPhysicalUrlAccess diatur ke false dan situs dikonfigurasi seperti yang ditunjukkan pada contoh sebelumnya, semua pengguna yang diautentikasi diizinkan untuk mengakses URL /search/{searchterm}.
Membaca Informasi Perutean di Halaman Formulir Web
Dalam kode halaman fisik Formulir Web, Anda dapat mengakses informasi yang telah diekstrak perutean dari URL (atau informasi lain yang telah ditambahkan objek lain ke objek RouteData ) dengan menggunakan dua properti baru: HttpRequest.RequestContext dan Page.RouteData. (Page.RouteData membungkus HttpRequest.RequestContext.RouteData.) Contoh berikut menunjukkan cara menggunakan Page.RouteData.
protected void Page_Load(object sender, EventArgs e)
{
string searchterm = Page.RouteData.Values["searchterm"] as string;
label1.Text = searchterm;
}
Kode mengekstrak nilai yang diteruskan untuk parameter searchterm, seperti yang didefinisikan dalam contoh rute sebelumnya. Pertimbangkan URL permintaan berikut:
http://localhost/search/scott/
Ketika permintaan ini dibuat, kata "scott" akan dirender di search.aspx
halaman.
Mengakses Informasi Perutean di Markup
Metode yang dijelaskan di bagian sebelumnya menunjukkan cara mendapatkan data rute dalam kode di halaman Formulir Web. Anda juga dapat menggunakan ekspresi dalam markup yang memberi Anda akses ke informasi yang sama. Penyusun ekspresi adalah cara yang kuat dan elegan untuk bekerja dengan kode deklaratif. (Untuk informasi selengkapnya, lihat entri Express Yourself With Custom Expression Builders di blog Phil Haack.)
ASP.NET 4 menyertakan dua penyusun ekspresi baru untuk perutean Formulir Web. Contoh berikut menunjukkan cara menggunakannya.
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl="<%$RouteUrl:SearchTerm=scott%>">Search for Scott</asp:HyperLink>
Dalam contoh, ekspresi RouteUrl digunakan untuk menentukan URL yang didasarkan pada parameter rute. Ini menyelamatkan Anda dari keharusan mengkodekan URL lengkap ke dalam markup, dan memungkinkan Anda mengubah struktur URL nanti tanpa memerlukan perubahan apa pun pada tautan ini.
Berdasarkan rute yang ditentukan sebelumnya, markup ini menghasilkan URL berikut:
http://localhost/search/scott
ASP.NET secara otomatis mengerjakan rute yang benar (yaitu, menghasilkan URL yang benar) berdasarkan parameter input. Anda juga dapat menyertakan nama rute dalam ekspresi, yang memungkinkan Anda menentukan rute yang akan digunakan.
Contoh berikut menunjukkan cara menggunakan ekspresi RouteValue .
<asp:Label ID="Label1" runat="server" Text="<%$RouteValue:SearchTerm%>" />
Saat halaman yang berisi kontrol ini berjalan, nilai "scott" ditampilkan di label.
Ekspresi RouteValue memudahkan penggunaan data rute dalam markup, dan menghindari keharusan bekerja dengan sintaks Page.RouteData["x"] yang lebih kompleks dalam markup.
Menggunakan Data Rute untuk Parameter Kontrol Sumber Data
Kelas RouteParameter memungkinkan Anda menentukan data rute sebagai nilai parameter untuk kueri dalam kontrol sumber data. Ini berfungsi seperti kelas , seperti yang ditunjukkan dalam contoh berikut:
<asp:sqldatasource id="SqlDataSource1" runat="server"
connectionstring="<%$ ConnectionStrings:MyNorthwind %>"
selectcommand="SELECT CompanyName,ShipperID FROM Shippers where
CompanyName=@companyname"
<selectparameters>
<asp:routeparameter name="companyname" RouteKey="searchterm" />
</selectparameters>
</asp:sqldatasource>
Dalam hal ini, nilai searchterm parameter rute akan digunakan untuk @companyname parameter dalam pernyataan Select .
Mengatur ID Klien
Properti ClientIDMode baru mengatasi masalah lama dalam ASP.NET, yaitu bagaimana kontrol membuat atribut id untuk elemen yang mereka render. Mengetahui atribut id untuk elemen yang dirender penting jika aplikasi Anda menyertakan skrip klien yang mereferensikan elemen-elemen ini.
Atribut id dalam HTML yang dirender untuk kontrol server Web dihasilkan berdasarkan properti ClientID kontrol. Hingga ASP.NET 4, algoritma untuk menghasilkan atribut id dari properti ClientID telah menggabungkan kontainer penamaan (jika ada) dengan ID, dan dalam kasus kontrol berulang (seperti dalam kontrol data), untuk menambahkan awalan dan angka berurutan. Meskipun ini selalu menjamin bahwa ID kontrol di halaman unik, algoritma telah menghasilkan ID kontrol yang tidak dapat diprediksi, dan karenanya sulit untuk direferensikan dalam skrip klien.
Properti ClientIDMode baru memungkinkan Anda menentukan dengan lebih tepat bagaimana ID klien dihasilkan untuk kontrol. Anda dapat mengatur properti ClientIDMode untuk kontrol apa pun, termasuk untuk halaman tersebut. Pengaturan yang mungkin adalah sebagai berikut:
- AutoID – Ini setara dengan algoritma untuk menghasilkan nilai properti ClientID yang digunakan dalam versi ASP.NET sebelumnya.
- Statis - Ini menentukan bahwa nilai ClientID akan sama dengan ID tanpa menggabungkan ID kontainer penamaan induk. Ini dapat berguna dalam kontrol pengguna Web. Karena kontrol pengguna Web dapat ditemukan di halaman yang berbeda dan dalam kontrol kontainer yang berbeda, mungkin sulit untuk menulis skrip klien untuk kontrol yang menggunakan algoritma AutoID karena Anda tidak dapat memprediksi nilai ID.
- Dapat diprediksi - Opsi ini terutama untuk digunakan dalam kontrol data yang menggunakan templat berulang. Ini menggabungkan properti ID dari kontainer penamaan kontrol, tetapi nilai ClientID yang dihasilkan tidak berisi string seperti "ctlxxx". Pengaturan ini berfungsi bersama dengan properti ClientIDRowSuffix kontrol. Anda mengatur properti ClientIDRowSuffix ke nama bidang data, dan nilai bidang tersebut digunakan sebagai akhiran untuk nilai ClientID yang dihasilkan. Biasanya Anda akan menggunakan kunci utama rekaman data sebagai nilai ClientIDRowSuffix .
- Warisi - Pengaturan ini adalah perilaku default untuk kontrol; ini menentukan bahwa pembuatan ID kontrol sama dengan induknya.
Anda dapat mengatur properti ClientIDMode di tingkat halaman. Ini menentukan nilai ClientIDMode default untuk semua kontrol di halaman saat ini.
Nilai ClientIDMode default di tingkat halaman adalah AutoID, dan nilai ClientIDMode default pada tingkat kontrol adalah Warisi. Akibatnya, jika Anda tidak mengatur properti ini di mana saja dalam kode Anda, semua kontrol akan default ke algoritma AutoID .
Anda mengatur nilai tingkat halaman di direktif @ Halaman , seperti yang diperlihatkan dalam contoh berikut:
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs"
Inherits="_Default"
ClientIDMode="Predictable" %>
Anda juga dapat mengatur nilai ClientIDMode dalam file konfigurasi, baik di tingkat komputer (komputer) atau di tingkat aplikasi. Ini menentukan pengaturan ClientIDMode default untuk semua kontrol di semua halaman dalam aplikasi. Jika Anda menetapkan nilai di tingkat komputer, itu menentukan pengaturan ClientIDMode default untuk semua situs Web di komputer tersebut. Contoh berikut menunjukkan pengaturan ClientIDMode dalam file konfigurasi:
<system.web>
<pages clientIDMode="Predictable"></pages>
</system.web>
Seperti disebutkan sebelumnya, nilai properti ClientID berasal dari kontainer penamaan untuk induk kontrol. Dalam beberapa skenario, seperti saat Anda menggunakan halaman master, kontrol bisa berakhir dengan ID seperti yang ada di HTML yang dirender berikut:
<div id="ctl00_ContentPlaceHolder1_ParentPanel">
<div id="ctl00_ContentPlaceHolder1_ParentPanel_NamingPanel1">
<input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1"
type="text" value="Hello!"
id="ctl00_ContentPlaceHolder1_ParentPanel_NamingPanel1_TextBox1" />
</div>
Meskipun elemen input yang ditampilkan dalam markup (dari kontrol TextBox ) hanya dua kontainer penamaan di dalam halaman (kontrol ContentPlaceholder berlapis), karena cara halaman master diproses, hasil akhirnya adalah ID kontrol seperti berikut ini:
ctl00_ContentPlaceHolder1_ParentPanel_NamingPanel1_TextBox1
ID ini dijamin unik di halaman, tetapi tidak perlu panjang untuk sebagian besar tujuan. Bayangkan Anda ingin mengurangi panjang ID yang dirender, dan untuk memiliki lebih banyak kontrol atas bagaimana ID dihasilkan. (Misalnya, Anda ingin menghilangkan awalan "ctlxxx".) Cara termampu untuk mencapai hal ini adalah dengan mengatur properti ClientIDMode seperti yang ditunjukkan dalam contoh berikut:
<tc:NamingPanel runat="server" ID="ParentPanel" ClientIDMode="Static">
<tc:NamingPanel runat="server" ID="NamingPanel1" ClientIDMode="Predictable">
<asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox>
</tc:NamingPanel>
</tc:NamingPanel>
Dalam sampel ini, properti ClientIDMode diatur ke Statis untuk elemen NamingPanel terluar, dan diatur ke Dapat Diprediksi untuk elemen NamingControl dalam. Pengaturan ini menghasilkan markup berikut (halaman lainnya dan halaman master diasumsikan sama seperti pada contoh sebelumnya):
<div id="ParentPanel">
<div id="ParentPanel_NamingPanel1">
<input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1"
type="text" value="Hello!" id="ParentPanel_NamingPanel1_TextBox1" />
</div>
Pengaturan Statis memiliki efek mengatur ulang hierarki penamaan untuk kontrol apa pun di dalam elemen NamingPanel terluar, dan menghilangkan CONTENTPlaceHolder dan MASTERPage ID dari ID yang dihasilkan. (Atribut nama elemen yang dirender tidak terpengaruh, sehingga fungsionalitas ASP.NET normal dipertahankan untuk peristiwa, status tampilan, dan sebagainya.) Efek samping dari mengatur ulang hierarki penamaan adalah bahwa bahkan jika Anda memindahkan markup untuk elemen NamingPanel ke kontrol ContentPlaceholder yang berbeda, ID klien yang dirender tetap sama.
Catatan
Perhatikan Terserah Anda untuk memastikan bahwa ID kontrol yang dirender unik. Jika tidak, ini dapat merusak fungsionalitas apa pun yang memerlukan ID unik untuk elemen HTML individual, seperti fungsi document.getElementById klien.
Membuat ID Klien yang Dapat Diprediksi di Kontrol Data-Bound
Nilai ClientID yang dihasilkan untuk kontrol dalam kontrol daftar terikat data oleh algoritma warisan bisa panjang dan tidak benar-benar dapat diprediksi. Fungsionalitas ClientIDMode dapat membantu Anda memiliki kontrol lebih besar atas bagaimana ID ini dihasilkan.
Markup dalam contoh berikut menyertakan kontrol ListView :
<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1"
OnSelectedIndexChanged="ListView1_SelectedIndexChanged"
ClientIDMode="Predictable"
RowClientIDRowSuffix="ProductID">
</asp:ListView>
Dalam contoh sebelumnya, properti ClientIDMode dan RowClientIDRowSuffix diatur dalam markup. Properti ClientIDRowSuffix hanya dapat digunakan dalam kontrol terikat data, dan perilakunya berbeda tergantung pada kontrol mana yang Anda gunakan. Perbedaannya adalah sebagai berikut:
Kontrol GridView — Anda dapat menentukan nama satu atau beberapa kolom di sumber data, yang digabungkan pada durasi untuk membuat ID klien. Misalnya, jika Anda mengatur RowClientIDRowSuffix ke "ProductName, ProductId", ID kontrol untuk elemen yang dirender akan memiliki format seperti berikut ini:
rootPanel_GridView1_ProductNameLabel_Chai_1
Kontrol ListView — Anda dapat menentukan satu kolom di sumber data yang ditambahkan ke ID klien. Misalnya, jika Anda mengatur ClientIDRowSuffix ke "ProductName", ID kontrol yang dirender akan memiliki format seperti berikut:
rootPanel_ListView1_ProductNameLabel_1
Dalam hal ini 1 berikutnya berasal dari ID produk item data saat ini.
Kontrol pengulang— Kontrol ini tidak mendukung properti ClientIDRowSuffix. Dalam kontrol Repeater , indeks baris saat ini digunakan. Saat Anda menggunakan ClientIDMode="Predictable" dengan kontrol Repeater , ID klien dihasilkan yang memiliki format berikut:
Repeater1_ProductNameLabel_0
0 berikutnya adalah indeks baris saat ini.
Kontrol FormView dan DetailsView tidak menampilkan beberapa baris, sehingga tidak mendukung properti ClientIDRowSuffix .
Pemilihan Baris Persisten dalam Kontrol Data
Kontrol GridView dan ListView dapat memungkinkan pengguna memilih baris. Dalam versi ASP.NET sebelumnya, pilihan telah didasarkan pada indeks baris pada halaman. Misalnya, jika Anda memilih item ketiga di halaman 1 lalu berpindah ke halaman 2, item ketiga di halaman tersebut dipilih.
Pilihan persisten awalnya hanya didukung dalam proyek Data Dinamis di .NET Framework 3.5 SP1. Ketika fitur ini diaktifkan, item yang dipilih saat ini didasarkan pada kunci data untuk item. Ini berarti bahwa jika Anda memilih baris ketiga di halaman 1 dan berpindah ke halaman 2, tidak ada yang dipilih di halaman 2. Saat Anda kembali ke halaman 1, baris ketiga masih dipilih. Pilihan persisten sekarang didukung untuk kontrol GridView dan ListView di semua proyek dengan menggunakan properti EnablePersistedSelection , seperti yang ditunjukkan dalam contoh berikut:
<asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true">
</asp:GridView>
Kontrol Bagan ASP.NET
Kontrol Bagan ASP.NET memperluas penawaran visualisasi data di .NET Framework. Dengan kontrol Bagan , Anda dapat membuat halaman ASP.NET yang memiliki bagan yang intuitif dan menarik secara visual untuk analisis statistik atau keuangan yang kompleks. Kontrol Bagan ASP.NET diperkenalkan sebagai add-on ke rilis .NET Framework versi 3.5 SP1 dan merupakan bagian dari rilis .NET Framework 4.
Kontrol ini mencakup fitur-fitur berikut:
- 35 jenis bagan yang berbeda.
- Jumlah area bagan, judul, legenda, dan anotasi yang tidak terbatas.
- Berbagai pengaturan tampilan untuk semua elemen bagan.
- Dukungan 3-D untuk sebagian besar jenis bagan.
- Label data pintar yang dapat secara otomatis pas di sekitar titik data.
- Garis strip, pemutus skala, dan penskalakan logaritma.
- Lebih dari 50 rumus keuangan dan statistik untuk analisis dan transformasi data.
- Pengikatan sederhana dan manipulasi data bagan.
- Dukungan untuk format data umum seperti tanggal, waktu, dan mata uang.
- Dukungan untuk interaktivitas dan kustomisasi berbasis peristiwa, termasuk peristiwa klik klien menggunakan Ajax.
- Manajemen status.
- Streaming biner.
Gambar berikut menunjukkan contoh bagan keuangan yang dihasilkan oleh kontrol bagan ASP.NET.
Gambar 2: contoh kontrol Bagan ASP.NET
Untuk contoh selengkapnya tentang cara menggunakan kontrol ASP.NET Bagan, unduh kode sampel di halaman Lingkungan Sampel untuk Kontrol Bagan Microsoft di situs Web MSDN. Anda dapat menemukan lebih banyak sampel konten komunitas di Forum Kontrol Bagan.
Menambahkan Kontrol Bagan ke Halaman ASP.NET
Contoh berikut menunjukkan cara menambahkan kontrol Bagan ke halaman ASP.NET dengan menggunakan markup. Dalam contoh, kontrol Bagan menghasilkan bagan kolom untuk titik data statis.
<asp:Chart ID="Chart1" runat="server">
<Series>
<asp:Series Name="Series1" ChartType="Column">
<Points>
<asp:DataPoint AxisLabel="Product A" YValues="345"/>
<asp:DataPoint AxisLabel="Product B" YValues="456"/>
<asp:DataPoint AxisLabel="Product C" YValues="125"/>
<asp:DataPoint AxisLabel="Product D" YValues="957"/> &
lt;/Points>
</asp:Series>
</Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1">
<AxisY IsLogarithmic="True" />
</asp:ChartArea>
</ChartAreas>
<Legends>
<asp:Legend Name="Legend1" Title="Product Sales" />
</Legends>
</asp:Chart>
Menggunakan Bagan 3-D
Kontrol Bagan berisi koleksi ChartAreas , yang bisa berisi objek ChartArea yang menentukan karakteristik area bagan. Misalnya, untuk menggunakan 3-D untuk area bagan, gunakan properti Area3DStyle seperti dalam contoh berikut:
<asp:ChartArea Name="ChartArea1">
<area3dstyle
Rotation="10"
Perspective="10"
Enable3D="True"
Inclination="15"
IsRightAngleAxes="False"
WallWidth="0"
IsClustered="False" />
<%-- Additional markup here --%>
</asp:ChartArea>
Gambar di bawah ini memperlihatkan bagan 3-D dengan empat seri jenis bagan Batang .
Gambar 3: Bagan Batang 3-D
Menggunakan Pemutus Skala dan Skala Logaritma
Pemutus skala dan skala logaritma adalah dua cara tambahan untuk menambahkan kecanggih ke bagan. Fitur-fitur ini khusus untuk setiap sumbu di area bagan. Misalnya, untuk menggunakan fitur ini pada sumbu Y utama area bagan, gunakan properti AxisY.IsLogarithmic dan ScaleBreakStyle dalam objek ChartArea . Cuplikan berikut menunjukkan cara menggunakan jeda skala pada sumbu Y utama.
<asp:ChartArea Name="ChartArea1">
<axisy>
<ScaleBreakStyle
BreakLineStyle="Wave"
CollapsibleSpaceThreshold="40"
Enabled="True" />
</axisy>
<%-- Additional markup here --%>
</asp:ChartArea>
Gambar di bawah ini menunjukkan sumbu Y dengan pemutusan skala diaktifkan.
Gambar 4: Pemutus Skala
Memfilter Data dengan Kontrol QueryExtender
Tugas yang sangat umum bagi pengembang yang membuat halaman Web berbasis data adalah memfilter data. Ini secara tradisional telah dilakukan dengan membangun klausa Where dalam kontrol sumber data. Pendekatan ini bisa rumit, dan dalam beberapa kasus sintaks Where tidak memungkinkan Anda memanfaatkan fungsionalitas penuh dari database yang mendasar.
Untuk mempermudah pemfilteran, kontrol QueryExtender baru telah ditambahkan di ASP.NET 4. Kontrol ini dapat ditambahkan ke kontrol EntityDataSource atau LinqDataSource untuk memfilter data yang dikembalikan oleh kontrol ini. Karena kontrol QueryExtender bergantung pada LINQ, filter diterapkan pada server database sebelum data dikirim ke halaman, yang menghasilkan operasi yang sangat efisien.
Kontrol QueryExtender mendukung berbagai opsi filter. Bagian berikut menjelaskan opsi ini dan memberikan contoh cara menggunakannya.
Cari
Untuk opsi pencarian, kontrol QueryExtender melakukan pencarian di bidang tertentu. Dalam contoh berikut, kontrol menggunakan teks yang dimasukkan dalam kontrol TextBoxSearch dan mencari kontennya di ProductName
kolom dan Supplier.CompanyName
dalam data yang dikembalikan dari kontrol LinqDataSource .
<asp:LinqDataSource ID="dataSource" runat="server"> TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
<asp:SearchExpression DataFields="ProductName, Supplier.CompanyName"
SearchType="StartsWith">
<asp:ControlParameter ControlID="TextBoxSearch" />
</asp:SearchExpression>
</asp:QueryExtender>
Rentang
Opsi rentang mirip dengan opsi pencarian, tetapi menentukan sepasang nilai untuk menentukan rentang. Dalam contoh berikut, kontrol QueryExtender mencari UnitPrice
kolom dalam data yang dikembalikan dari kontrol LinqDataSource . Rentang dibaca dari kontrol TextBoxFrom dan TextBoxTo di halaman.
<asp:LinqDataSource ID="dataSource" runat="server"> TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
<asp:RangeExpression DataField="UnitPrice" MinType="Inclusive"
MaxType="Inclusive">
<asp:ControlParameter ControlID="TextBoxFrom" />
<asp:ControlParameter ControlID="TexBoxTo" />
</asp:RangeExpression>
</asp:QueryExtender>
PropertyExpression
Opsi ekspresi properti memungkinkan Anda menentukan perbandingan dengan nilai properti. Jika ekspresi mengevaluasi ke true, data yang sedang diperiksa akan dikembalikan. Dalam contoh berikut, kontrol QueryExtender memfilter data dengan membandingkan data dalam Discontinued
kolom dengan nilai dari kontrol CheckBoxDiscontinued di halaman.
<asp:LinqDataSource ID="dataSource" runat="server" TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
<asp:PropertyExpression>
<asp:ControlParameter ControlID="CheckBoxDiscontinued" Name="Discontinued" />
</asp:PropertyExpression>
</asp:QueryExtender>
CustomExpression
Terakhir, Anda dapat menentukan ekspresi kustom untuk digunakan dengan kontrol QueryExtender . Opsi ini memungkinkan Anda memanggil fungsi di halaman yang menentukan logika filter kustom. Contoh berikut menunjukkan cara menentukan ekspresi kustom secara deklaratif dalam kontrol QueryExtender .
<asp:LinqDataSource ID="dataSource" runat="server" TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
<asp:CustomExpression OnQuerying="FilterProducts" />
</asp:QueryExtender>
Contoh berikut menunjukkan fungsi kustom yang dipanggil oleh kontrol QueryExtender . Dalam hal ini, alih-alih menggunakan kueri database yang menyertakan klausa Where , kode menggunakan kueri LINQ untuk memfilter data.
protected void FilterProducts(object sender, CustomExpressionEventArgs e)
{
e.Query = from p in e.Query.Cast()
where p.UnitPrice >= 10
select p;
}
Contoh-contoh ini hanya memperlihatkan satu ekspresi yang digunakan dalam kontrol QueryExtender pada satu waktu. Namun, Anda dapat menyertakan beberapa ekspresi di dalam kontrol QueryExtender .
Ekspresi Kode Terkodekan Html
Beberapa situs ASP.NET (terutama dengan ASP.NET MVC) sangat bergantung pada penggunaan <%
= expression %>
sintaks (sering disebut "nugget kode") untuk menulis beberapa teks ke respons. Saat Anda menggunakan ekspresi kode, mudah untuk melupakan pengodean HTML teks, Jika teks berasal dari input pengguna, itu dapat membiarkan halaman terbuka ke serangan XSS (Cross Site Scripting).
ASP.NET 4 memperkenalkan sintaks baru berikut untuk ekspresi kode:
<%: expression %>
Sintaks ini menggunakan pengodean HTML secara default saat menulis ke respons. Ekspresi baru ini secara efektif diterjemahkan ke yang berikut ini:
<%= HttpUtility.HtmlEncode(expression) %>
Misalnya, <%: Request["UserInput"] %> melakukan pengodean HTML pada nilai Request["UserInput"].
Tujuan dari fitur ini adalah untuk memungkinkan untuk mengganti semua instans sintaks lama dengan sintaks baru sehingga Anda tidak dipaksa untuk memutuskan di setiap langkah mana yang akan digunakan. Namun, ada beberapa kasus di mana teks yang dihasilkan dimaksudkan sebagai HTML atau sudah dikodekan, dalam hal ini dapat menyebabkan pengodean ganda.
Untuk kasus tersebut, ASP.NET 4 memperkenalkan antarmuka baru, IHtmlString, bersama dengan implementasi konkret, HtmlString. Instans dari jenis ini memungkinkan Anda menunjukkan bahwa nilai yang dikembalikan sudah dikodekan dengan benar (atau diperiksa) untuk ditampilkan sebagai HTML, dan oleh karena itu nilai tidak boleh dikodekan HTML lagi. Misalnya, berikut ini tidak boleh (dan bukan) HTML yang dikodekan:
<%: new HtmlString("<strong>HTML that is not encoded</strong>") %>
ASP.NET metode pembantu MVC 2 telah diperbarui untuk bekerja dengan sintaks baru ini sehingga tidak dikodekan ganda, tetapi hanya ketika Anda menjalankan ASP.NET 4. Sintaks baru ini tidak berfungsi saat Anda menjalankan aplikasi menggunakan ASP.NET 3.5 SP1.
Perlu diingat bahwa ini tidak menjamin perlindungan dari serangan XSS. Misalnya, HTML yang menggunakan nilai atribut yang tidak dalam tanda kutip dapat berisi input pengguna yang masih rentan. Perhatikan bahwa output kontrol ASP.NET dan ASP.NET pembantu MVC selalu menyertakan nilai atribut dalam tanda kutip, yang merupakan pendekatan yang direkomendasikan.
Demikian juga, sintaks ini tidak melakukan pengodean JavaScript, seperti saat Anda membuat string JavaScript berdasarkan input pengguna.
Perubahan Templat Proyek
Di versi ASP.NET sebelumnya, saat Anda menggunakan Visual Studio untuk membuat proyek Situs Web atau proyek Aplikasi Web baru, proyek yang dihasilkan hanya berisi halaman Default.aspx, file default Web.config
, dan App_Data
folder, seperti yang diperlihatkan dalam ilustrasi berikut:
Visual Studio juga mendukung jenis proyek Situs Web Kosong, yang tidak berisi file sama sekali, seperti yang ditunjukkan pada gambar berikut:
Hasilnya adalah bahwa untuk pemula, sangat sedikit panduan tentang cara membangun aplikasi Web produksi. Oleh karena itu, ASP.NET 4 memperkenalkan tiga templat baru, satu untuk proyek aplikasi Web kosong, dan satu masing-masing untuk proyek Aplikasi Web dan Situs Web.
Templat Aplikasi Web Kosong
Seperti namanya, templat Aplikasi Web Kosong adalah proyek Aplikasi Web yang dilucuti. Anda memilih templat proyek ini dari kotak dialog Proyek Baru Visual Studio, seperti yang diperlihatkan dalam gambar berikut:
(Klik untuk melihat gambar ukuran penuh)
Saat Anda membuat Empty ASP.NET Web Application, Visual Studio membuat tata letak folder berikut:
Ini mirip dengan tata letak Situs Web Kosong dari versi ASP.NET sebelumnya, dengan satu pengecualian. Di Visual Studio 2010, proyek Aplikasi Web Kosong dan Situs Web Kosong berisi file minimal Web.config
berikut yang berisi informasi yang digunakan oleh Visual Studio untuk mengidentifikasi kerangka kerja yang ditargetkan proyek:
Tanpa properti targetFramework ini, Visual Studio secara default menargetkan .NET Framework 2.0 untuk mempertahankan kompatibilitas saat membuka aplikasi yang lebih lama.
Templat Proyek Aplikasi Web dan Situs Web
Dua templat proyek baru lainnya yang dikirim dengan Visual Studio 2010 berisi perubahan besar. Gambar berikut menunjukkan tata letak proyek yang dibuat saat Anda membuat proyek Aplikasi Web baru. (Tata letak untuk proyek Situs Web hampir identik.)
Proyek ini mencakup sejumlah file yang tidak dibuat di versi sebelumnya. Selain itu, proyek Aplikasi Web baru dikonfigurasi dengan fungsionalitas keanggotaan dasar, yang memungkinkan Anda dengan cepat memulai dalam mengamankan akses ke aplikasi baru. Karena penyertaan ini, Web.config
file untuk proyek baru mencakup entri yang digunakan untuk mengonfigurasi keanggotaan, peran, dan profil. Contoh berikut menunjukkan Web.config
file untuk proyek Aplikasi Web baru. (Dalam hal ini, roleManager dinonaktifkan.)
(Klik untuk melihat gambar ukuran penuh)
Proyek ini juga berisi file kedua Web.config
di Account
direktori. File konfigurasi kedua menyediakan cara untuk mengamankan akses ke halaman ChangePassword.aspx untuk pengguna yang tidak masuk. Contoh berikut menunjukkan konten file kedua Web.config
.
Halaman yang dibuat secara default dalam templat proyek baru juga berisi lebih banyak konten daripada di versi sebelumnya. Proyek berisi halaman master default dan file CSS, dan halaman default (Default.aspx) dikonfigurasi untuk menggunakan halaman master secara default. Hasilnya adalah bahwa ketika Anda menjalankan aplikasi Web atau situs Web untuk pertama kalinya, halaman default (beranda) sudah berfungsi. Bahkan, ini mirip dengan halaman default yang Anda lihat saat memulai aplikasi MVC baru.
(Klik untuk melihat gambar ukuran penuh)
Tujuan dari perubahan ini pada templat proyek adalah untuk memberikan panduan tentang cara mulai membangun aplikasi Web baru. Dengan markup yang mematuhi XHTML 1.0 yang benar secara semantik dan dengan tata letak yang ditentukan menggunakan CSS, halaman dalam templat mewakili praktik terbaik untuk membangun aplikasi Web ASP.NET 4. Halaman default juga memiliki tata letak dua kolom yang dapat Anda kustomisasi dengan mudah.
Misalnya, bayangkan bahwa untuk Aplikasi Web baru Anda ingin mengubah beberapa warna dan menyisipkan logo perusahaan Anda menggantikan logo Aplikasi ASP.NET Saya. Untuk melakukan ini, Anda membuat direktori baru di bawah Content
untuk menyimpan gambar logo Anda:
Untuk menambahkan gambar ke halaman, Anda kemudian membuka Site.Master
file, menemukan di mana teks Aplikasi ASP.NET Saya ditentukan, dan menggantinya dengan elemen gambar yang atribut src-nya diatur ke gambar logo baru, seperti dalam contoh berikut:
(Klik untuk melihat gambar ukuran penuh)
Anda kemudian dapat masuk ke file Site.css dan memodifikasi definisi kelas CSS untuk mengubah warna latar belakang halaman serta header.
Hasil dari perubahan ini adalah Anda dapat menampilkan halaman beranda yang dikustomisasi dengan sedikit usaha:
(Klik untuk melihat gambar ukuran penuh)
Penyempurnaan CSS
Salah satu bidang pekerjaan utama di ASP.NET 4 adalah membantu merender HTML yang sesuai dengan standar HTML terbaru. Ini termasuk perubahan pada bagaimana kontrol server web ASP.NET menggunakan gaya CSS.
Pengaturan Kompatibilitas untuk Penyajian
Secara default, ketika aplikasi Web atau situs Web menargetkan .NET Framework 4, atribut controlRenderingCompatibilityVersion dari elemen halaman diatur ke "4.0". Elemen ini didefinisikan dalam file tingkat Web.config
komputer dan secara default berlaku untuk semua aplikasi ASP.NET 4:
<system.web>
<pages controlRenderingCompatibilityVersion="3.5|4.0"/>
</system.web>
Nilai untuk controlRenderingCompatibility adalah string, yang memungkinkan potensi definisi versi baru dalam rilis mendatang. Dalam rilis saat ini, nilai berikut didukung untuk properti ini:
- "3.5". Pengaturan ini menunjukkan penyajian dan markup warisan. Markup yang dirender oleh kontrol kompatibel mundur 100%, dan pengaturan properti xhtmlConformance dihormati.
- "4.0". Jika properti memiliki pengaturan ini, ASP.NET kontrol server Web melakukan hal berikut:
- Properti xhtmlConformance selalu diperlakukan sebagai "Ketat". Akibatnya, kontrol merender markup Strict XHTML 1.0.
- Menonaktifkan kontrol non-input tidak lagi merender gaya yang tidak valid.
- elemen div di sekitar bidang tersembunyi sekarang ditata sehingga tidak mengganggu aturan CSS yang dibuat pengguna.
- Kontrol menu merender markup yang benar secara semantik dan sesuai dengan panduan aksesibilitas.
- Kontrol validasi tidak merender gaya sebaris.
- Kontrol yang sebelumnya merender border="0" (kontrol yang berasal dari kontrol tabel ASP.NET, dan kontrol gambar ASP.NET) tidak lagi merender atribut ini.
Menonaktifkan Kontrol
Dalam ASP.NET 3.5 SP1 dan versi yang lebih lama, kerangka kerja merender atribut yang dinonaktifkan dalam markup HTML untuk kontrol apa pun yang properti Diaktifkannya diatur ke false. Namun, menurut spesifikasi HTML 4.01, hanya elemen input yang harus memiliki atribut ini.
Di ASP.NET 4, Anda dapat mengatur properti controlRenderingCompatibilityVersion ke "3.5", seperti dalam contoh berikut:
<system.web>
<pages controlRenderingCompatibilityVersion="3.5"/>
</system.web>
Anda dapat membuat markup untuk kontrol Label seperti berikut ini, yang menonaktifkan kontrol:
<asp:Label id="Label" runat="server" Text="Test" Enabled="false">
Kontrol Label akan merender HTML berikut:
<span id="Label1" disabled="disabled">Test</span>
Di ASP.NET 4, Anda dapat mengatur controlRenderingCompatibilityVersion ke "4.0". Dalam hal ini, hanya kontrol yang merender elemen input yang akan merender atribut yang dinonaktifkan saat properti Diaktifkan kontrol diatur ke false. Kontrol yang tidak merender elemen input HTML sebagai gantinya merender atribut kelas yang mereferensikan kelas CSS yang dapat Anda gunakan untuk menentukan pencarian kontrol yang dinonaktifkan. Misalnya, kontrol Label yang diperlihatkan dalam contoh sebelumnya akan menghasilkan markup berikut:
<span id="Span1" class="aspnetdisabled">Test</span>
Nilai default untuk kelas yang ditentukan untuk kontrol ini adalah "aspNetDisabled". Namun, Anda dapat mengubah nilai default ini dengan mengatur properti statis DisabledCssClass dari kelas WebControl . Untuk pengembang kontrol, perilaku yang digunakan untuk kontrol tertentu juga dapat ditentukan menggunakan properti SupportsDisabledAttribute .
Menyembunyikan Elemen div Di Sekitar Bidang Tersembunyi
ASP.NET 2.0 dan versi yang lebih baru merender bidang tersembunyi khusus sistem (seperti elemen tersembunyi yang digunakan untuk menyimpan informasi status tampilan) di dalam elemen div untuk mematuhi standar XHTML. Namun, ini dapat menyebabkan masalah ketika aturan CSS memengaruhi elemen div pada halaman. Misalnya, ini dapat mengakibatkan baris satu piksel muncul di halaman di sekitar elemen div tersembunyi. Dalam ASP.NET 4, elemen div yang menyertakan bidang tersembunyi yang dihasilkan oleh ASP.NET menambahkan referensi kelas CSS seperti dalam contoh berikut:
<div class="aspNetHidden">...</div>
Anda kemudian dapat menentukan kelas CSS yang hanya berlaku untuk elemen tersembunyi yang dihasilkan oleh ASP.NET, seperti dalam contoh berikut:
<style type="text/css">
DIV# aspNetHidden {border:0;}
</style>
Merender Tabel Luar untuk Kontrol Ber template
Secara default, kontrol server web ASP.NET berikut ini yang mendukung templat secara otomatis dibungkus dalam tabel luar yang digunakan untuk menerapkan gaya sebaris:
- FormView
- Masuk
- PasswordRecovery
- ChangePassword
- Wizard
- CreateUserWizard
Properti baru bernama RenderOuterTable telah ditambahkan ke kontrol ini yang memungkinkan tabel luar dihapus dari markup. Misalnya, pertimbangkan contoh kontrol FormView berikut:
<asp:FormView ID="FormView1" runat="server">
<ItemTemplate>
Content
</ItemTemplate>
</asp:FormView>
Markup ini merender output berikut ke halaman, yang menyertakan tabel HTML:
<table cellspacing="0" border="0" id="Table1" style="border-collapse:collapse;">
<tr>
<td colspan="2">
Content
</td>
</tr>
</table>
Untuk mencegah tabel dirender, Anda bisa mengatur properti RenderOuterTable kontrol FormView, seperti dalam contoh berikut:
<asp:FormView ID="FormView1" runat="server" RenderOuterTable="false">
Contoh sebelumnya merender output berikut, tanpa elemen tabel, tr, dan td :
Konten
Peningkatan ini dapat mempermudah gaya konten kontrol dengan CSS, karena tidak ada tag tak terduga yang dirender oleh kontrol.
Catatan
Catatan Perubahan ini menonaktifkan dukungan untuk fungsi format otomatis di perancang Visual Studio 2010, karena tidak ada lagi elemen tabel yang dapat menghosting atribut gaya yang dihasilkan oleh opsi format otomatis.
Penyempurnaan Kontrol ListView
Kontrol ListView telah lebih mudah digunakan di ASP.NET 4. Versi kontrol sebelumnya mengharuskan Anda menentukan templat tata letak yang berisi kontrol server dengan ID yang diketahui. Markup berikut menunjukkan contoh umum cara menggunakan kontrol ListView di ASP.NET 3.5.
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder>
</LayoutTemplate>
<ItemTemplate>
<% Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
Di ASP.NET 4, kontrol ListView tidak memerlukan templat tata letak. Markup yang diperlihatkan dalam contoh sebelumnya dapat diganti dengan markup berikut:
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<% Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
CheckBoxList dan Penyempurnaan Kontrol RadioButtonList
Di ASP.NET 3.5, Anda dapat menentukan tata letak untuk CheckBoxList dan RadioButtonList menggunakan dua pengaturan berikut:
- Alur. Kontrol merender elemen rentang untuk memuat kontennya.
- Tabel. Kontrol merender elemen tabel untuk memuat kontennya.
Contoh berikut menunjukkan markup untuk setiap kontrol ini.
<asp:CheckBoxList ID="CheckBoxList1" runat="server" RepeatLayout="Flow">
<asp:ListItem Text="CheckBoxList" Value="cbl" />
</asp:CheckBoxList>
<asp:RadioButtonList runat="server" RepeatLayout="Table">
<asp:ListItem Text="RadioButtonList" Value="rbl" />
</asp:RadioButtonList>
Secara default, kontrol merender HTML yang mirip dengan yang berikut ini:
<span id="Span2"><input id="CheckBoxList1_0" type="checkbox"
name="CheckBoxList1$0" /><label for="CheckBoxList1_0">CheckBoxList</label></span>
<table id="RadioButtonList1" border="0">
<tr>
<td><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="rbl" /><label for="RadioButtonList1_0">RadioButtonList</label></td>
</tr>
</table>
Karena kontrol ini berisi daftar item, untuk merender HTML yang benar secara semantik, mereka harus merender kontennya menggunakan elemen daftar HTML (li). Ini memudahkan pengguna yang membaca halaman Web menggunakan teknologi bantuan, dan membuat kontrol lebih mudah ditata menggunakan CSS.
Di ASP.NET 4, kontrol CheckBoxList dan RadioButtonList mendukung nilai baru berikut untuk properti RepeatLayout :
- OrderedList – Konten dirender sebagai elemen li dalam elemen ol .
- UnorderedList – Konten dirender sebagai elemen li dalam elemen ul .
Contoh berikut menunjukkan cara menggunakan nilai baru ini.
<asp:CheckBoxList ID="CheckBoxList1" runat="server"
RepeatLayout="OrderedList">
<asp:ListItem Text="CheckBoxList" Value="cbl" />
</asp:CheckBoxList>
<asp:RadioButtonList ID="RadioButtonList1" runat="server"
RepeatLayout="UnorderedList">
<asp:ListItem Text="RadioButtonList" Value="rbl" />
</asp:RadioButtonList>
Markup sebelumnya menghasilkan HTML berikut:
<ol id="CheckBoxList1">
<li><input id="CheckBoxList1_0" type="checkbox" name="CheckBoxList1$0" value="cbl" /><label for="CheckBoxList1_0">CheckBoxList</label></li>
</ol>
<ul id="RadioButtonList1">
<li><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="rbl" /><label for="RadioButtonList1_0">RadioButtonList</label></li>
</ul>
Catatan
Catatan Jika Anda mengatur RepeatLayout ke OrderedList atau UnorderedList, properti RepeatDirection tidak dapat lagi digunakan dan akan melemparkan pengecualian pada durasi jika properti telah diatur dalam markup atau kode Anda. Properti tidak akan memiliki nilai karena tata letak visual kontrol ini ditentukan menggunakan CSS sebagai gantinya.
Peningkatan Kontrol Menu
Sebelum ASP.NET 4, kontrol Menu merender serangkaian tabel HTML. Ini membuatnya lebih sulit untuk menerapkan gaya CSS di luar pengaturan properti sebaris dan juga tidak mematuhi standar aksesibilitas.
Di ASP.NET 4, kontrol sekarang merender HTML menggunakan markup semantik yang terdiri dari daftar yang tidak diurutkan dan elemen daftar. Contoh berikut menunjukkan markup di halaman ASP.NET untuk kontrol Menu .
<asp:Menu ID="Menu1" runat="server">
<Items> <asp:MenuItem Text="Home" Value="Home" />
<asp:MenuItem Text="About" Value="About" />
</Items>
</asp:Menu>
Ketika halaman dirender, kontrol menghasilkan HTML berikut (kode onclick telah dihilangkan untuk kejelasan):
<div id="Menu1">
<ul>
<li><a href="#" onclick="...">Home</a></li>
<li><a href="#" onclick="...">About</a></li>
</ul>
</div>
<script type="text/javascript">
new Sys.WebForms.Menu('Menu1');
</script>
Selain penyempurnaan penyajian, navigasi keyboard menu telah ditingkatkan menggunakan manajemen fokus. Saat kontrol Menu mendapatkan fokus, Anda dapat menggunakan tombol panah untuk menavigasi elemen. Kontrol Menu juga sekarang melampirkan peran aplikasi internet kaya yang dapat diakses (ARIA) dan atribut follosayapuntuk aksesibilitas yang ditingkatkan.
Gaya untuk kontrol menu dirender dalam blok gaya di bagian atas halaman, bukan sejalan dengan elemen HTML yang dirender. Jika Anda ingin mengambil kontrol penuh atas gaya untuk kontrol, Anda dapat mengatur properti IncludeStyleBlock baru ke false, dalam hal ini blok gaya tidak dipancarkan. Salah satu cara untuk menggunakan properti ini adalah dengan menggunakan fitur format otomatis di perancang Visual Studio untuk mengatur tampilan menu. Anda kemudian dapat menjalankan halaman, membuka sumber halaman, lalu menyalin blok gaya yang dirender ke file CSS eksternal. Di Visual Studio, batalkan gaya dan atur IncludeStyleBlock ke false. Hasilnya adalah bahwa tampilan menu ditentukan menggunakan gaya dalam lembar gaya eksternal.
Wizard dan Kontrol CreateUserWizard
Wizard ASP.NET dan kontrol CreateUserWizard mendukung templat yang memungkinkan Anda menentukan HTML yang mereka render. (CreateUserWizard berasal dari Wizard.) Contoh berikut menunjukkan markup untuk kontrol CreateUserWizard yang sepenuhnya templat:
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ActiveStepIndex="0">
<HeaderTemplate>
</HeaderTemplate>
<SideBarTemplate>
</SideBarTemplate>
<StepNavigationTemplate>
</StepNavigationTemplate>
<StartNavigationTemplate>
</StartNavigationTemplate>
<FinishNavigationTemplate>
</FinishNavigationTemplate>
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
<ContentTemplate>
</ContentTemplate>
<CustomNavigationTemplate>
</CustomNavigationTemplate>
</asp:CreateUserWizardStep>
<asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
<ContentTemplate>
</ContentTemplate>
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
Kontrol merender HTML yang mirip dengan yang berikut ini:
<table cellspacing="0" cellpadding="0" border="0" id="CreateUserWizard1" style="border-collapse:collapse;">
<tr>
<td>Header</td>
</tr>
<tr style="height:100%;">
<td>
<table cellspacing="0" cellpadding="0" border="0" style="height:100%;width:100%;border-collapse:collapse;">
<tr>
<td style="height:100%;width:100%;"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="right"></td>
</tr>
</table>
Di ASP.NET 3.5 SP1, meskipun Anda dapat mengubah konten templat, Anda masih memiliki kontrol terbatas atas output kontrol Wizard . Di ASP.NET 4, Anda bisa membuat templat LayoutTemplate dan menyisipkan kontrol PlaceHolder (menggunakan nama khusus) untuk menentukan bagaimana Anda ingin kontrol Wizard dirender. Contoh berikut menunjukkan ini:
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ActiveStepIndex="1">
<LayoutTemplate>
<asp:PlaceHolder ID="headerPlaceholder" runat="server" />
<asp:PlaceHolder ID="sideBarPlaceholder" runat="server" />
<asp:PlaceHolder id="wizardStepPlaceholder" runat="server" />
<asp:PlaceHolder id="navigationPlaceholder" runat="server" />
</LayoutTemplate>
<HeaderTemplate>
Header
</HeaderTemplate>
<WizardSteps>
<asp:CreateUserWizardStep runat="server">
<ContentTemplate>
</ContentTemplate>
</asp:CreateUserWizardStep>
<asp:CompleteWizardStep runat="server">
<ContentTemplate>
</ContentTemplate>
</asp:CreateUserWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
Contoh berisi tempat penampung bernama berikut ini dalam elemen LayoutTemplate :
- headerPlaceholder – Pada durasi, ini digantikan oleh konten elemen HeaderTemplate .
- sideBarPlaceholder – Pada durasi, ini digantikan oleh konten elemen SideBarTemplate .
- wizardStepPlaceHolder – Pada durasi, ini digantikan oleh konten elemen WizardStepTemplate .
- navigationPlaceholder – Pada durasi, ini digantikan oleh templat navigasi apa pun yang telah Anda tentukan.
Markup dalam contoh yang menggunakan tempat penampung merender HTML berikut (tanpa konten yang benar-benar ditentukan dalam templat):
<span>
</span>
Satu-satunya HTML yang sekarang tidak ditentukan pengguna adalah elemen rentang . (Kami mengantisipasi bahwa dalam rilis mendatang, bahkan elemen rentang tidak akan dirender.) Ini sekarang memberi Anda kontrol penuh atas hampir semua konten yang dihasilkan oleh kontrol Wizard .
ASP.NET MVC
ASP.NET MVC diperkenalkan sebagai kerangka kerja add-on untuk ASP.NET 3.5 SP1 pada bulan Maret 2009. Visual Studio 2010 mencakup ASP.NET MVC 2, yang mencakup fitur dan kemampuan baru.
Dukungan Area
Area memungkinkan Anda mengelompokkan pengontrol dan tampilan ke dalam bagian aplikasi besar dalam isolasi relatif dari bagian lain. Setiap area dapat diimplementasikan sebagai proyek MVC ASP.NET terpisah yang kemudian dapat dirujuk oleh aplikasi utama. Ini membantu mengelola kompleksitas saat Anda membangun aplikasi besar dan memudahkan beberapa tim untuk bekerja sama pada satu aplikasi.
Dukungan Validasi Atribut Data-Annotation
Atribut DataAnnotations memungkinkan Anda melampirkan logika validasi ke model dengan menggunakan atribut metadata. Atribut DataAnnotations diperkenalkan dalam ASP.NET Dynamic Data di ASP.NET 3.5 SP1. Atribut ini telah diintegrasikan ke dalam pengikat model default dan menyediakan sarana berbasis metadata untuk memvalidasi input pengguna.
Pembantu Ber templat
Pembantu bertempat memungkinkan Anda mengaitkan templat pengeditan dan tampilan secara otomatis dengan jenis data. Misalnya, Anda dapat menggunakan pembantu templat untuk menentukan bahwa elemen UI pemilih tanggal secara otomatis dirender untuk nilai System.DateTime . Ini mirip dengan templat bidang di ASP.NET Data Dinamis.
Metode pembantu Html.EditorFor dan Html.DisplayFor memiliki dukungan bawaan untuk merender jenis data standar serta objek kompleks dengan beberapa properti. Mereka juga menyesuaikan penyajian dengan memungkinkan Anda menerapkan atribut anotasi data seperti DisplayName dan ScaffoldColumn ke objek ViewModel .
Seringkali Anda ingin menyesuaikan output dari pembantu UI lebih jauh dan memiliki kontrol penuh atas apa yang dihasilkan. Metode pembantu Html.EditorFor dan Html.DisplayFor mendukung ini menggunakan mekanisme templat yang memungkinkan Anda menentukan templat eksternal yang dapat mengambil alih dan mengontrol output yang dirender. Templat dapat dirender satu per satu untuk kelas.
Data Dinamis
Data Dinamis diperkenalkan dalam rilis .NET Framework 3.5 SP1 pada pertengahan 2008. Fitur ini menyediakan banyak penyempurnaan untuk membuat aplikasi berbasis data, termasuk yang berikut ini:
- Pengalaman RAD untuk membangun situs Web berbasis data dengan cepat.
- Validasi otomatis yang didasarkan pada batasan yang ditentukan dalam model data.
- Kemampuan untuk dengan mudah mengubah markup yang dihasilkan untuk bidang di kontrol GridView dan DetailsView dengan menggunakan templat bidang yang merupakan bagian dari proyek Data Dinamis Anda.
Catatan
Catatan Untuk informasi selengkapnya, lihat dokumentasi Data Dinamis di Pustaka MSDN.
Untuk ASP.NET 4, Data Dinamis telah ditingkatkan untuk memberi pengembang kekuatan yang lebih besar untuk membangun situs Web berbasis data dengan cepat.
Mengaktifkan Data Dinamis untuk Proyek yang Ada
Fitur Data Dinamis yang dikirim dalam .NET Framework 3.5 SP1 membawa fitur baru seperti berikut:
- Templat bidang – Templat ini menyediakan templat berbasis jenis data untuk kontrol terikat data. Templat bidang menyediakan cara yang lebih sederhana untuk mengkustomisasi tampilan kontrol data daripada menggunakan bidang templat untuk setiap bidang.
- Validasi – Data Dinamis memungkinkan Anda menggunakan atribut pada kelas data untuk menentukan validasi untuk skenario umum seperti bidang yang diperlukan, pemeriksaan rentang, pemeriksaan jenis, pencocokan pola menggunakan ekspresi reguler, dan validasi kustom. Validasi diberlakukan oleh kontrol data.
Namun, fitur-fitur ini memiliki persyaratan berikut:
- Lapisan akses data harus didasarkan pada Kerangka Kerja Entitas atau LINQ ke SQL.
- Satu-satunya kontrol sumber data yang didukung untuk fitur ini adalah kontrol EntityDataSource atau LinqDataSource .
- Fitur memerlukan proyek Web yang telah dibuat menggunakan templat Data Dinamis atau Entitas Data Dinamis untuk memiliki semua file yang diperlukan untuk mendukung fitur tersebut.
Tujuan utama dukungan Data Dinamis di ASP.NET 4 adalah untuk mengaktifkan fungsionalitas baru Data Dinamis untuk aplikasi ASP.NET apa pun. Contoh berikut menunjukkan markup untuk kontrol yang dapat memanfaatkan fungsionalitas Data Dinamis di halaman yang sudah ada.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True"
DataKeyNames="ProductID" DataSourceID="LinqDataSource1">
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="DataClassesDataContext" EnableDelete="True" EnableInsert="True"
EnableUpdate="True" TableName="Products">
</asp:LinqDataSource>
Dalam kode untuk halaman, kode berikut harus ditambahkan untuk mengaktifkan dukungan Data Dinamis untuk kontrol ini:
GridView1.EnableDynamicData(typeof(Product));
Saat kontrol GridView dalam mode edit, Data Dinamis secara otomatis memvalidasi bahwa data yang dimasukkan dalam format yang tepat. Jika tidak, pesan kesalahan ditampilkan.
Fungsionalitas ini juga memberikan manfaat lain, seperti dapat menentukan nilai default untuk mode sisipkan. Tanpa Data Dinamis, untuk mengimplementasikan nilai default untuk bidang, Anda harus melampirkan ke peristiwa, menemukan kontrol (menggunakan FindControl), dan mengatur nilainya. Di ASP.NET 4, panggilan EnableDynamicData mendukung parameter kedua yang memungkinkan Anda meneruskan nilai default untuk bidang apa pun pada objek, seperti yang ditunjukkan dalam contoh ini:
DetailsView1.EnableDynamicData(typeof(Product), new { ProductName = "DefaultName" });
Sintaks Kontrol DynamicDataManager Deklaratif
Kontrol DynamicDataManager telah ditingkatkan sehingga Anda dapat mengonfigurasinya secara deklaratif, seperti halnya sebagian besar kontrol dalam ASP.NET, bukan hanya dalam kode. Markup untuk kontrol DynamicDataManager terlihat seperti contoh berikut:
<asp:DynamicDataManager ID="DynamicDataManager1" runat="server"
AutoLoadForeignKeys="true">
<DataControls>
<asp:DataControlReference ControlID="GridView1" />
</DataControls>
</asp:DynamicDataManager>
<asp:GridView id="GridView1" runat="server"
</asp:GridView>
Markup ini memungkinkan perilaku Data Dinamis untuk kontrol GridView1 yang dirujuk di bagian DataControls dari kontrol DynamicDataManager .
Templat Entitas
Templat entitas menawarkan cara baru untuk menyesuaikan tata letak data tanpa mengharuskan Anda membuat halaman kustom. Templat halaman menggunakan kontrol FormView (alih-alih kontrol DetailsView , seperti yang digunakan dalam templat halaman di versi Data Dinamis sebelumnya) dan kontrol DynamicEntity untuk merender templat Entitas. Ini memberi Anda lebih banyak kontrol atas markup yang dirender oleh Data Dinamis.
Daftar berikut ini memperlihatkan tata letak direktori proyek baru yang berisi templat entitas:
\DynamicData\EntityTemplates
\DynamicData\EntityTemplates\Default.ascx
\DynamicData\EntityTemplates\Default_Edit.ascx
\DynamicData\EntityTemplates\Default_Insert.ascx
EntityTemplate
Direktori berisi templat tentang cara menampilkan objek model data. Secara default, objek dirender dengan menggunakan Default.ascx
templat, yang menyediakan markup yang terlihat seperti markup yang dibuat oleh kontrol DetailsView yang digunakan oleh Data Dinamis di ASP.NET 3.5 SP1. Contoh berikut menunjukkan markup untuk Default.ascx
kontrol:
<asp:EntityTemplate runat="server" ID="TemplateContainer1">
<ItemTemplate>
<tr
<td>
<asp:Label ID="Label1" runat="server" OnInit="Label_Init" />
</td>
<td>
<asp:DynamicControl runat="server" OnInit="DynamicControl_Init" />
</td>
</tr>
</ItemTemplate>
</asp:EntityTemplate>
Templat default dapat diedit untuk mengubah tampilan dan nuansa untuk seluruh situs. Ada templat untuk operasi tampilan, edit, dan sisipkan. Templat baru dapat ditambahkan berdasarkan nama objek data untuk mengubah tampilan dan nuansa hanya dari satu jenis objek. Misalnya, Anda dapat menambahkan templat berikut:
\DynamicData\EntityTemplates\Products.aspx
Templat mungkin berisi markup berikut:
<tr>
<td>Name</td>
<td><asp:DynamicControl runat="server" DataField="ProductName" /></td>
<td>Category</td>
<td><asp:DynamicControl runat="server" DataField="Category" /></td>
</tr>
Templat entitas baru ditampilkan di halaman dengan menggunakan kontrol DynamicEntity baru. Pada durasi, kontrol ini diganti dengan konten templat entitas. Markup berikut ini memperlihatkan kontrol FormView di Detail.aspx
templat halaman yang menggunakan templat entitas. Perhatikan elemen DynamicEntity dalam markup.
<asp:FormView runat="server" ID="FormView1"
DataSourceID="DetailsDataSource"
OnItemDeleted="FormView1_ItemDeleted">
<ItemTemplate>
<table class="DDDetailsTable" cellpadding="6">
<asp:DynamicEntity runat="server" />
<tr class="td">
<td colspan="2">
<asp:DynamicHyperLink ID="EditHyperLink" runat="server"
Action="Edit" Text="Edit" />
<asp:LinkButton ID="DeleteLinkButton" runat="server"
CommandName="Delete"
CausesValidation="false"
OnClientClick='return confirm("Are you sure you want to delete this item?");'
Text="Delete" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:FormView>
Templat Bidang Baru untuk URL dan Alamat Email
ASP.NET 4 memperkenalkan dua templat bidang bawaan baru, EmailAddress.ascx
dan Url.ascx
. Templat ini digunakan untuk bidang yang ditandai sebagai EmailAddress atau Url dengan atribut DataType . Untuk objek EmailAddress , bidang ditampilkan sebagai hyperlink yang dibuat dengan menggunakan mailto: protokol. Saat pengguna mengklik tautan, tautan akan membuka klien email pengguna dan membuat pesan kerangka. Objek yang ditik sebagai Url ditampilkan sebagai hyperlink biasa.
Contoh berikut menunjukkan bagaimana bidang akan ditandai.
[DataType(DataType.EmailAddress)]
public object HomeEmail { get; set; }
[DataType(DataType.Url)]
public object Website { get; set; }
Membuat Tautan dengan Kontrol DynamicHyperLink
Data Dinamis menggunakan fitur perutean baru yang ditambahkan di .NET Framework 3.5 SP1 untuk mengontrol URL yang dilihat pengguna akhir saat mereka mengakses situs Web. Kontrol DynamicHyperLink baru memudahkan untuk membangun tautan ke halaman di situs Data Dinamis. Contoh berikut menunjukkan cara menggunakan kontrol DynamicHyperLink :
<asp:DynamicHyperLink ID="ListHyperLink" runat="server"
Action="List" TableName="Products">
Show all products
</asp:DynamicHyperLink>
Markup ini membuat tautan yang menunjuk ke halaman Daftar untuk Products
tabel berdasarkan rute yang ditentukan dalam Global.asax
file. Kontrol secara otomatis menggunakan nama tabel default yang menjadi dasar halaman Data Dinamis.
Dukungan untuk Pewarisan dalam Model Data
Baik Kerangka Kerja Entitas maupun LINQ ke SQL mendukung pewarisan dalam model data mereka. Contohnya mungkin database yang memiliki InsurancePolicy
tabel. Ini mungkin juga berisi CarPolicy
tabel dan HousePolicy
yang memiliki bidang yang sama seperti InsurancePolicy
lalu menambahkan lebih banyak bidang. Data Dinamis telah dimodifikasi untuk memahami objek yang diwariskan dalam model data dan untuk mendukung perancah untuk tabel yang diwariskan.
Dukungan untuk Hubungan Banyak-ke-Banyak (Hanya Kerangka Kerja Entitas)
Kerangka Kerja Entitas memiliki dukungan yang kaya untuk hubungan banyak-ke-banyak antara tabel, yang diimplementasikan dengan mengekspos hubungan sebagai koleksi pada objek Entitas . Templat baru ManyToMany.ascx
dan ManyToMany_Edit.ascx
bidang telah ditambahkan untuk memberikan dukungan untuk menampilkan dan mengedit data yang terlibat dalam hubungan banyak ke banyak.
Atribut Baru untuk Tampilan Kontrol dan Enumerasi Dukungan
DisplayAttribute telah ditambahkan untuk memberi Anda kontrol tambahan atas bagaimana bidang ditampilkan. Atribut DisplayName di versi Data Dinamis sebelumnya memungkinkan Anda mengubah nama yang digunakan sebagai caption untuk bidang. Kelas DisplayAttribute baru memungkinkan Anda menentukan lebih banyak opsi untuk menampilkan bidang, seperti urutan bidang ditampilkan dan apakah bidang akan digunakan sebagai filter. Atribut ini juga menyediakan kontrol independen atas nama yang digunakan untuk label dalam kontrol GridView , nama yang digunakan dalam kontrol DetailsView , teks bantuan untuk bidang , dan marka air yang digunakan untuk bidang (jika bidang menerima input teks).
Kelas EnumDataTypeAttribute telah ditambahkan untuk memungkinkan Anda memetakan bidang ke enumerasi. Saat Anda menerapkan atribut ini ke bidang, Anda menentukan jenis enumerasi. Data Dinamis menggunakan templat bidang baru Enumeration.ascx
untuk membuat UI untuk menampilkan dan mengedit nilai enumerasi. Templat memetakan nilai dari database ke nama dalam enumerasi.
Dukungan yang Ditingkatkan untuk Filter
Data Dinamis 1.0 dikirim dengan filter bawaan untuk kolom Boolean dan kolom kunci asing. Filter tidak memperbolehkan Anda menentukan apakah filter ditampilkan atau dalam urutan apa filter ditampilkan. Atribut DisplayAttribute baru membahas kedua masalah ini dengan memberi Anda kontrol atas apakah kolom ditampilkan sebagai filter dan dalam urutan apa kolom akan ditampilkan.
Peningkatan tambahan adalah bahwa dukungan pemfilteran telah ditulis ulanguntuk menggunakan fitur baru Formulir Web. Ini memungkinkan Anda membuat filter tanpa memerlukan pengetahuan tentang kontrol sumber data yang akan digunakan filter. Seiring dengan ekstensi ini, filter juga telah diubah menjadi kontrol templat, yang memungkinkan Anda untuk menambahkan yang baru. Terakhir, kelas DisplayAttribute yang disebutkan sebelumnya memungkinkan filter default ditimpa, dengan cara yang sama seperti UIHint memungkinkan templat bidang default untuk kolom ditimpa.
Peningkatan Pengembangan Web Visual Studio 2010
Pengembangan web di Visual Studio 2010 telah ditingkatkan untuk kompatibilitas CSS yang lebih besar, peningkatan produktivitas melalui cuplikan markup HTML dan ASP.NET dan JavaScript IntelliSense dinamis baru.
Kompatibilitas CSS yang Ditingkatkan
Desainer Visual Web Developer di Visual Studio 2010 telah diperbarui untuk meningkatkan kepatuhan standar CSS 2.1. Perancang lebih mempertahankan integritas sumber HTML dan lebih kuat daripada versi Visual Studio sebelumnya. Di balik itu, peningkatan arsitektur juga telah dilakukan yang akan lebih memungkinkan peningkatan di masa depan dalam penyajian, tata letak, dan kemampuan servis.
Cuplikan HTML dan JavaScript
Di editor HTML, IntelliSense melengkapi nama tag secara otomatis. Fitur Cuplikan IntelliSense secara otomatis melengkapi seluruh tag dan banyak lagi. Di Visual Studio 2010, cuplikan IntelliSense didukung untuk JavaScript, bersama C# dan Visual Basic, yang didukung di versi Visual Studio sebelumnya.
Visual Studio 2010 menyertakan lebih dari 200 cuplikan yang membantu Anda menyelesaikan ASP.NET umum dan tag HTML secara otomatis, termasuk atribut yang diperlukan (seperti runat="server") dan atribut umum khusus untuk tag (seperti ID, DataSourceID, ControlToValidate, dan Teks).
Anda dapat mengunduh cuplikan tambahan, atau Anda dapat menulis cuplikan Anda sendiri yang merangkum blok markup yang Anda atau tim Anda gunakan untuk tugas umum.
Penyempurnaan JavaScript IntelliSense
Di Visual 2010, JavaScript IntelliSense telah dirancang ulang untuk memberikan pengalaman pengeditan yang lebih kaya. IntelliSense sekarang mengenali objek yang telah dihasilkan secara dinamis oleh metode seperti registerNamespace dan dengan teknik serupa yang digunakan oleh kerangka kerja JavaScript lainnya. Performa telah ditingkatkan untuk menganalisis pustaka skrip besar dan untuk menampilkan IntelliSense dengan sedikit atau tanpa penundaan pemrosesan. Kompatibilitas telah meningkat secara dramatis untuk mendukung hampir semua pustaka pihak ketiga dan untuk mendukung gaya pengodean yang beragam. Komentar dokumentasi sekarang diurai saat Anda mengetik dan segera dimanfaatkan oleh IntelliSense.
Penyebaran Aplikasi Web dengan Visual Studio 2010
Ketika ASP.NET pengembang menyebarkan aplikasi Web, mereka sering menemukan bahwa mereka mengalami masalah seperti berikut:
- Menyebarkan ke situs hosting bersama memerlukan teknologi seperti FTP, yang bisa lambat. Selain itu, Anda harus melakukan tugas secara manual seperti menjalankan skrip SQL untuk mengonfigurasi database dan Anda harus mengubah pengaturan IIS, seperti mengonfigurasi folder direktori virtual sebagai aplikasi.
- Di lingkungan perusahaan, selain menyebarkan file aplikasi Web, administrator sering harus memodifikasi ASP.NET file konfigurasi dan pengaturan IIS. Administrator database harus menjalankan serangkaian skrip SQL agar database aplikasi berjalan. Instalasi semacam itu padat karya, sering memakan waktu berjam-jam untuk diselesaikan, dan harus didokumenkan dengan hati-hati.
Visual Studio 2010 mencakup teknologi yang mengatasi masalah ini dan yang memungkinkan Anda menyebarkan aplikasi Web dengan lancar. Salah satu teknologi ini adalah IIS Web Deployment Tool (MsDeploy.exe).
Fitur penyebaran web di Visual Studio 2010 mencakup area utama berikut:
- Kemasan web
- transformasi Web.config
- Penerapan database
- Terbitkan satu klik untuk aplikasi Web
Bagian berikut ini menyediakan detail tentang fitur-fitur ini.
Kemasan Web
Visual Studio 2010 menggunakan alat MSDeploy untuk membuat file terkompresi (.zip) untuk aplikasi Anda, yang disebut sebagai paket Web. File paket berisi metadata tentang aplikasi Anda ditambah konten berikut:
- Pengaturan IIS, yang mencakup pengaturan kumpulan aplikasi, pengaturan halaman kesalahan, dan sebagainya.
- Konten Web aktual, yang mencakup halaman Web, kontrol pengguna, konten statis (gambar dan file HTML), dan sebagainya.
- SQL Server skema dan data database.
- Sertifikat keamanan, komponen untuk diinstal di GAC, pengaturan registri, dan sebagainya.
Paket Web dapat disalin ke server apa pun lalu diinstal secara manual dengan menggunakan IIS Manager. Atau, untuk penyebaran otomatis, paket dapat diinstal dengan menggunakan perintah baris perintah atau dengan menggunakan API penyebaran.
Visual Studio 2010 menyediakan tugas dan target MSBuild bawaan untuk membuat paket Web. Untuk informasi selengkapnya, lihat ASP.NET Gambaran Umum Penyebaran Proyek Aplikasi Web di situs Web MSDN dan 10 + 20 alasan mengapa Anda harus membuat Paket Web di blog Vishal Joshi.
Transformasi Web.config
Untuk penyebaran aplikasi Web, Visual Studio 2010 memperkenalkan Transformasi Dokumen XML (XDT), yang merupakan fitur yang memungkinkan Anda mengubah Web.config
file dari pengaturan pengembangan ke pengaturan produksi. Pengaturan transformasi ditentukan dalam file transformasi bernama web.debug.config
, web.release.config
, dan sebagainya. (Nama file ini cocok dengan konfigurasi MSBuild.) File transformasi hanya menyertakan perubahan yang perlu Anda lakukan pada file yang disebarkan Web.config
. Anda menentukan perubahan dengan menggunakan sintaks sederhana.
Contoh berikut menunjukkan sebagian web.release.config
file yang mungkin diproduksi untuk penyebaran konfigurasi rilis Anda. Kata kunci Ganti dalam contoh menentukan bahwa selama penyebaran simpul connectionString dalam Web.config
file akan diganti dengan nilai yang tercantum dalam contoh.
<connectionStrings xdt:Transform="Replace">
<add name="BlogDB" connectionString="connection string detail]" />
</connectionStrings>
Untuk informasi selengkapnya, lihat Sintaks TransformasiWeb.config untuk Penyebaran Proyek Aplikasi Web di situs Web MSDN danPenyebaran Web: Transformasi Web.Config di blog Vishal Joshi.
Penyebaran Database
Paket penyebaran Visual Studio 2010 dapat menyertakan dependensi pada database SQL Server. Sebagai bagian dari definisi paket, Anda menyediakan string koneksi untuk database sumber Anda. Saat Anda membuat paket Web, Visual Studio 2010 membuat skrip SQL untuk skema database dan secara opsional untuk data, lalu menambahkannya ke paket. Anda juga dapat menyediakan skrip SQL kustom dan menentukan urutan menjalankannya di server. Pada waktu penyebaran, Anda menyediakan string koneksi yang sesuai untuk server target; proses penyebaran kemudian menggunakan string koneksi ini untuk menjalankan skrip yang membuat skema database dan menambahkan data.
Selain itu, dengan menggunakan penerbitan satu klik, Anda dapat mengonfigurasi penyebaran untuk menerbitkan database Anda secara langsung saat aplikasi diterbitkan ke situs hosting bersama jarak jauh. Untuk informasi selengkapnya, lihat Cara: Menyebarkan Database Dengan Proyek Aplikasi Web di situs Web MSDN dan Penyebaran Database dengan VS 2010 di blog Vishal Joshi.
One-Click Terbitkan untuk Aplikasi Web
Visual Studio 2010 juga memungkinkan Anda menggunakan layanan manajemen jarak jauh IIS untuk menerbitkan aplikasi Web ke server jarak jauh. Anda dapat membuat profil penerbitan untuk akun hosting Anda atau untuk menguji server atau server penahapan. Setiap profil dapat menyimpan kredensial yang sesuai dengan aman. Anda kemudian dapat menyebarkan ke salah satu server target dengan satu klik dengan menggunakan toolbar terbitkan satu klik Web. Dengan Visual Studio 2010, Anda juga dapat menerbitkan dengan menggunakan baris perintah MSBuild. Ini memungkinkan Anda mengonfigurasi lingkungan build tim untuk menyertakan penerbitan dalam model integrasi berkelanjutan.
Untuk informasi selengkapnya, lihat Cara: Menyebarkan Proyek Aplikasi Web Menggunakan One-Click Terbitkan dan Terapkan Web di situs Web MSDN dan Web 1-Klik Terbitkan dengan VS 2010 di blog Vishal Joshi. Untuk melihat presentasi video tentang penyebaran aplikasi Web di Visual Studio 2010, lihat VS 2010 untuk Pratinjau Pengembang Web di blog Vishal Joshi.
Sumber
Situs Web berikut ini menyediakan informasi tambahan tentang ASP.NET 4 dan Visual Studio 2010.
- ASP.NET 4 — Dokumentasi resmi untuk ASP.NET 4 di situs Web MSDN.
- https://www.asp.net/ — Situs Web tim ASP.NET sendiri.
- https://www.asp.net/dynamicdata/ dan ASP.NET Peta Konten Data Dinamis — Sumber daya online di situs tim ASP.NET dan dalam dokumentasi resmi untuk ASP.NET Data Dinamis.
- https://www.asp.net/ajax/ — Sumber daya Web utama untuk pengembangan ASP.NET Ajax.
- https://devblogs.microsoft.com/dotnet/category/aspnet/ — Blog Tim Pengembang Web Visual, yang mencakup informasi tentang fitur di Visual Studio 2010.
- ASP.NET WebStack — Sumber daya Web utama untuk rilis pratinjau ASP.NET.
Disclaimer
Ini adalah dokumen awal dan dapat diubah secara substansial sebelum rilis komersial akhir perangkat lunak yang dijelaskan di sini.
Informasi yang terkandung dalam dokumen ini menunjukkan tampilan Microsoft Corporation saat ini tentang masalah yang dibahas pada tanggal publikasi. Karena Microsoft harus menanggapi perubahan kondisi pasar, itu tidak boleh ditafsirkan sebagai komitmen dari pihak Microsoft, dan Microsoft tidak dapat menjamin keakuratan informasi apa pun yang disajikan setelah tanggal publikasi.
Laporan Resmi ini hanya untuk tujuan informasi. MICROSOFT TIDAK MEMBERIKAN JAMINAN, TERSURAT, TERSIRAT, ATAU WAJIB, SEPERTI INFORMASI DALAM DOKUMEN INI.
Mematuhi semua undang-undang hak cipta yang berlaku adalah tanggung jawab pengguna. Tanpa membatasi hak cipta, tidak ada bagian dari dokumen ini yang dapat direproduksi, disimpan dalam atau diperkenalkan ke dalam sistem pengambilan, atau dikirimkan dalam bentuk apa pun atau dengan cara apa pun (elektronik, mekanis, fotokopi, perekaman, atau lainnya), atau untuk tujuan apa pun, tanpa izin tertulis dari Microsoft Corporation.
Microsoft mungkin memiliki paten, aplikasi paten, merek dagang, hak cipta, atau hak kekayaan intelektual lainnya yang mencakup materi pelajaran dalam dokumen ini. Kecuali secara tegas disediakan dalam perjanjian lisensi tertulis dari Microsoft, perabotan dokumen ini tidak memberi Anda lisensi apa pun untuk paten, merek dagang, hak cipta, atau kekayaan intelektual lainnya.
Kecuali dinyatakan lain, contoh perusahaan, organisasi, produk, nama domain, alamat email, logo, orang, tempat, dan peristiwa yang digambarkan di sini bersifat fiktif, dan tidak ada hubungan dengan perusahaan, organisasi, produk, nama domain, alamat email, logo, orang, tempat, atau acara yang sebenarnya dimaksudkan atau harus disimpulkan.
© 2009 Microsoft Corporation. Hak cipta dilindungi undang-undang.
Microsoft dan Windows adalah merek dagang terdaftar atau merek dagang Microsoft Corporation di Amerika Serikat dan/atau negara lain.
Nama perusahaan dan produk sebenarnya yang disebutkan di sini mungkin merupakan merek dagang dari pemiliknya masing-masing.