Beberapa waktu yang lalu saya telah memaparkan bererapa fitur baru di ASP.NET 4 di Fitur Baru ASP.NET 4.0 - Bagian 1, kini saya akan paparkan beberapa fitur baru lainnya. Berikut adalah beberapa fitur yang akan datang bersama ASP.NET 4.0
ViewState
Bagi developer ASP.NET pasti mengetahui bahwa ViewState memiliki beberapa kekurangan. Semua status control akan disimpan dalam ViewState. Berapa banyak bandwidth yang digunakan untuk ViewState sedangkan kebanyakan informasi itu tidak digunakan. Kita dapat mematikan ViewState di level halaman (default-nya nyala) dan semua control dalam halaman tersebut akan mematikan ViewState. Namun hal itu tidak bisa memecahkan masalah, karena kita acap kali membutuhkan beberapa informasi ViewState dari beberapa control dalam halaman. Kita dapat mematikan ViewState di masing-masing control dan tetap menghidupkan ViewState di halaman dan beberapa control yang dibutuhkan saja. Namun hal ini juga masih menjadi kendala jika dalam internal control yang kita matikan ViewState-nya ternyata memerlukan ViewState. Hal inilah yang menjadi kekurangan ViewState di ASP.NET 2.0 dan sebelumnya.
ViewState di ASP.NET 4 dapat diatur sedemikian rupa sehingga kita dapat menentukan apakah ViewState akan nyala (Enabled), mati (Disabled) atau mengikuti status ViewState induknya (Inherit). Pengaturan ini dilakukan di property ViewStateMode yang mana memiliki tiga pilihan yaitu Enabled, Disabled dan Inherit (atau kosong). Jika property tersebut kosong maka secara otomatis akan diset menjadi Inherit.
Anda dapat mengeset property ViewStateMode menjadi Disabled di level direktif @Page dan memilih beberapa control yang akan diset ViewStateMode menjadi Enabled.
<%@ Page Title="Home Page" Language="C#"
MasterPageFile="~/Site.master"
AutoEventWireup="true" ViewStateMode="Disabled"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
Semua control dalam halaman tersebut akan dimatikan jika property ViewStateMode pada control tersebut diset menjadi Inherit atau dikosongkan.
Anda juga dapat mengeset ViewStateMode di level MasterPage pada control ContentPlaceHolder. Dengan mengeset ViewStateMode di level MasterPage, semua control dalam page yang menggunakan MasterPage tersebut akan mengikuti setting pada MasterPage.
<asp:ContentPlaceHolder
ID="MainContent"
ViewStateMode="Disabled"
runat="server"/>
Dukungan Routing yang Lebih Baik
Jika Anda sudah mengenal ASP.NET MVC, maka tidak asing dengan istilah routing. Routing atau lebih tepat disebut sebagai URL routing merupakan mekanisme untuk membelokkan request dari URL virtual ke handler yang sebenarnya. Pada ASP.NET WebForms setiap request ditangani oleh file fisik di server web. Berbeda dengan ASP.NET MVC yang tidak hengharuskan memiliki file fisik untuk menangani setiap request. Request akan dibelokkan berdasarkan pola yang telah didefinisikan.
Routing bermanfaat untuk memudahkan pembacaan URL oleh manusia dan mesin pencari. Sebagai contoh URL berikut http://server/buku.aspx?penerbit=gramedia&tahun=2009 akan tampak seperti URL berikut http://server/buku/penerbit/gramedia/2009. Dengan menggunakan URL yang kedua, kita akan lebih mudah untuk mengingat dan juga lebih mudah untuk di-indeks oleh search engine.
Route didefinisikan dalam pola URL dalam sebuah placeholder yang akan memetakan nilainya setiap kali ada permintaan URL. Placeholder tersebut mengenali parameter URL di dalam tanda kurung kurawal { }. Informasil lainnya di dalam URL dianggap sebagai konstanta. Konstanta dan parameter URL dipisahkan dengan karakter garis miring (/). Route didefinisikan dalam method Application_Start di file Global.asax
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add("BukuRoute",
new Route("buku/{penerbit}/{tahun}",
new PageRouteHandler("~/buku.aspx")));
}
Dalam contoh di atas, route dengan nama “BukuRoute” akan me-routing-kan buku/{penerbit}/{tahun} ke file buku.aspx. Sebagai contoh URL http://server/buku/penerbit/gramedia/2009 akan dipetakan ke halaman buku.aspx.
Dalam halaman buku.aspx, nilai dari paramter dapat diambil dari collection RouteData.Values seperti contoh berikut.
var penerbit = RouteData.Values["penerbit"];
var tahunTerbit = RouteData.Values["tahun"];
Dengan demikian, URL yang digunakan menjadi lebih bersih dan mudah dibaca.