Mengenal ASP - NET MVC - Edisi Beta PDF
Mengenal ASP - NET MVC - Edisi Beta PDF
Puji syukur alhamdulillah penulis ucapkan kepala Allah SWT Tuhan Yang
Maha Esa atas selesainya e-book Mengenal ASP.NET MVC Edisi Beta
ini. Sesuai dengan versi framework ASP.NET MVC yang dipakai dalam
penjelasan dan demo edisi ini yaitu versi Beta, maka edisi ini bernama
Edisi Beta.
e-Book ini penulis tujukan bagi para developer ASP.NET classic yang
hendak mengenal ASP.NET MVC, maupun bagi para developer baru yang
hendak belajar ASP.NET MVC. Developer dari dunia pemrograman lain
terutama Ruby on Rails, Django, PHP, dan yang menyukai client-side
scripting juga dipersilakan untuk membaca e-book ini untuk dijadikan
perbandingan maupun awal untuk belajar.
Walaupun sudah berusaha sebaik mungkin penulis yakin bahwa pepatah
Tak ada gading yang tak retak berlaku juga untuk penulisan e-book ini.
Atas kekurangan-kekurangan tersebut penulis mengharapkan komentar
dan feedback dari para pembaca sekalian untuk perbaikan e-book ini
pada edisi berikutnya.
Penulis tidak lupa mengucapkan terimakasih kepada istri tercinta Ike Sri
Kartika Chandra, dan dua buah hati tersayang Muhammad Bima
Dirgantara, dan Yaqub Hangga Wirayudha yang selalu memberikan
dukungan dan menjadi cahaya semangat penulis dalam menyelesaikan ebook ini. Juga kepada Wely W dan Naren W dari Microsoft yang
memberikan kesempatan kepada penulis untuk mengkontribusikan ebook ini ke dalam website geeks.netindonesia.net. Terimakasih juga
untuk Umi Fadilah yang telah mendesain cover e-book ini dengan sangat
menarik.
Akhir kata, semoga e-book ini bisa memberikan manfaat sebesarbesarnya bagi kita semua.
D AFTAR I SI
Arsitektur MVC ...................................................................................................................... 1
Memahami ASP.NET MVC....................................................................................................... 4
ASP.NET MVC vs Web Form .................................................................................................... 6
Hello World ........................................................................................................................... 9
Routing ............................................................................................................................... 14
ASP.NET MVC Controller ...................................................................................................... 18
ASP.NET MVC View .............................................................................................................. 22
ASP.NET MVC Model ............................................................................................................ 26
Control / Component .......................................................................................................... 30
ASP.NET MVC dan AJAX ....................................................................................................... 35
ASP.NET MVC dan jQuery .................................................................................................... 42
ASP.NET MVC dan TDD ........................................................................................................ 48
MVCContrib ........................................................................................................................ 55
Grid ................................................................................................................................. 55
SparkViewEngine .............................................................................................................. 58
Deployment ........................................................................................................................ 62
Deployment ke IIS 6 ......................................................................................................... 63
Deployment ke IIS 7 Integrated Mode ............................................................................... 67
Konfigurasi IIS 6 untuk Request-Path Tanpa Ekstensi ....................................................... 68
Penutup .............................................................................................................................. 71
Tentang Pengarang ............................................................................................................. 72
A RSITEKTUR MVC
MVC adalah singkatan dari Model, View, Controller, yang merupakan
sebuah arsitektur untuk membuat sebuah program. Arsitektur ini
menekankan kepada pembagian dari komponen-komponen program
menjadi tiga bagian utama yaitu Model, View, dan Controller. Diagram
dalam Gambar 1 memberikan gambaran konseptual tentang arsitektur
MVC.
logic proses bisnis di dalam Model. Designer yang mumpuni dalam grafik
dan tampilan bisa fokus mengembangkan tampilan yang akan memikat
user. Kedua komponen tersebut bisa bekerja dengan harmonis yang
diatur oleh Controller. Pemisahan yang jelas ini juga akan memudahkan
pengetesan terhadap masing-masing komponen.
ASP.NET MVC
VS
W EB F ORM
ASP.NET MVC
ASP.NET MVC menggunakan
Controller.
Controller.
pemrogramannya menyesuaikan
terhadap hal ini. View-state
component-model dimana
aplikasi.
mempercepat pengembangan
native.
sulit.
Seperti yang kita lihat dalam tabel di atas, baik Web Form maupun
ASP.NET MVC memiliki kelebihan dan kekurangan masing-masing yang
mendukung kecocokannya untuk diterapkan terhadap program web
tertentu. Banyak developer yang menyukai Web Form, namun banyak juga
yang lebih memilih arsitektur MVC.
Sebelum kemunculan ASP.NET MVC, arsitektur MVC telah diterapkan
dalam framework Ruby on Rails dan Django. Popularitas arsitektur MVC
mulai mendapatkan perhatian besar terutama sejak munculnya Ruby on
7
H ELLO W ORLD
Untuk memberikan gambaran awal tentang ASP.NET MVC, marilah kita
membuat sebuah program Hello World. Program ini sangat sederhana,
hanya menampilkan kalimat Hello World ke dalam sebuah web page.
Untuk keperluan demo program ini, kita perlu mempersiapkan tool dan
semua library yang diperlukan sebagai berikut:
1. Microsoft Visual Studio 2008, bisa menggunakan versi apa saja. Versi
Express tersedia untuk di-download dari
http://www.microsoft.com/express/download/.
2. Microsoft .NET Framework 3.5 yang bisa di-download dari
http://www.microsoft.com/downloads/details.aspx?familyid=333325
FD-AE52-4E35-B531-508D977D32A6&displaylang=en, dan SP1-nya
dari
http://www.microsoft.com/downloads/details.aspx?FamilyID=ab9934
2f-5d1a-413d-8319-81da479ab0d7&displaylang=en.
3. ASP.NET MVC Beta installer yang bisa di-download dari
http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?Rele
aseId=18764.
Setelah di-download, lakukan instalasi untuk masing-masing tool dan
library di atas sesuai dengan urutannya. Apabila instalasi telah selesai,
ASP.NET MVC project-template akan terpasang secara otomatis dalam
Visual Studio 2008, dan library ASP.NET MVC akan tersalin ke folder
C:\Program Files\Microsoft ASP.NET\ASP.NET MVC
Beta\Assemblies.
Ikuti langkah-langkah berikut ini untuk memulai membuat program Hello
World:
1. Buka Visual Studio 2008, pilih menu File New Project.
Untuk keperluan program HelloWorld ini, pilih No. Klik tombol OK.
10
11
5. Pencet tombol F5 atau klik icon pada toolbar Visual Studio 2008
untuk memulai proses Start Debugging. Jika kotak dialog Debugging
Not Enabled muncul seperti tampak pada Gambar 6, biarkan pilihan
berada pada nilai default-nya, lalu klik tombol OK.
DALAM I NTERNET
E XPLORER
12
13
R OUTING
Routing adalah fitur baru dari .NET Framework 3.5, dan di-install di
dalam SP1. Di dalam ASP.NET MVC, fungsi Routing adalah melakukan
pemetaan antara request-path dengan Controller/action. Dalam ASP.NET
MVC, pemetaan ini diperlukan mengingat sebuah web request tidak akan
ditangani oleh sebuah file ASPX yang harus ada secara fisik.
Alamat web beserta file dan parameter query string yang kita ketikkan di
dalam address bar sebuah browser disebut dengan request-path.
Contoh-contoh request path adalah sebagai berikut:
/home/index.aspx
/home/index?page=2
/home/about
/catalog/product/microsoft-office
14
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
L ISTING 2 R OUTING
DALAM
R OUTING
15
Entri Routing lain yang cukup penting adalah IgnoreRoute(). Method ini
bisa digunakan untuk meng-exclude request-path dengan pola tertentu
agar tidak ditangani oleh proses pemetaan atau Routing ini, melainkan
diteruskan ke runtime ASP.NET untuk ditangani oleh handler lain bila
ada. Dalam Listing 2 kita bisa menjumpai penggunaan method ini untuk
meng-exclude semua request path yang diakhiri dengan ekstensi AXD.
Dalam Web Form, AXD adalah ekstensi yang diperuntukkan bagi HTTP
handler.
16
17
Dalam program Hello World kita di atas, terdapat dua Controller yang digenerate secara otomatis oleh ASP.NET MVC project-template, yaitu
HomeController dan AccountController. HomeController digunakan
untuk menangani request-path yang pattern-nya ditentukan dalam
route-table. Sedangkan AccountController digunakan dalam proses
autentikasi user. Bukalah HomeController.cs, source code-nya akan
terlihat seperti dalam Listing 3.
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Title"] = "Home Page";
ViewData["Message"] = "Hello World";
return View();
}
public ActionResult About()
{
18
DALAM
H OME C ONTROLLER
menyimpan objek dengan tipe apa pun ke dalam entri ViewData, tidak
terbatas pada string seperti terlihat dalam Listing 4.
Secara statistik, 90% atau lebih action-method akan memanggil method
View() untuk menampilkan sebuah View. Di sisi browser, sebuah View
identik dengan output dengan content-type text/html. Dalam sebuah
program web, content-type dari output bisa saja berupa text/xml, file,
image, ataupun redirection ke alamat web yang lain. Oleh karena itu
selain method View(), Controller juga memiliki method-method lain
untuk memberikan output dengan content-type yang bermacam-macam.
Berikut ini beberapa method dalam controller yang bisa kita gunakan
untuk mengarahkan tipe output yang diinginkan:
YANG
20
G AMBAR 11 O UTPUT
DARI
21
ASP.NET MVC juga mengenal konsep Master dan Content. View Master
digunakan untuk menentukan template layout, sedangkan View Content
digunakan untuk menyajikan isi dari View. View Master secara default
bernama Site.Master dan berada di dalam sub-folder Shared.
Listing 6 dan Listing 7 masing-masing memperlihatkan HTML source dan
code-behind dari index.aspx. Bagi yang sudah terbiasa dengan Web
Form, hal tersebut tentu bukanlah hal yang baru. Bedanya, View dalam
ASP.NET MVC inherit dari System.Web.Mvc.ViewPage. Namun secara
tidak langsung tetap inherit ke System.Web.UI.Page seperti page-page
dalam Web Form. ViewPage menambahkan behavior Page dengan
mekanisme yang diperlukan oleh ASP.NET MVC.
<%@ Page Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
AutoEventWireup="true"
CodeBehind="Index.aspx.cs"
Inherits="HelloWorld.Views.Home.Index" %>
<asp:Content ID="indexContent"
ContentPlaceHolderID="MainContent"
runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p>
To learn more about ASP.NET MVC visit
<a href="http://asp.net/mvc" title="ASP.NET MVC Website">
http://asp.net/mvc</a>.
</p>
</asp:Content>
L ISTING 6 HTML S OURCE I NDEX . ASPX
using System.Web.Mvc;
namespace HelloWorld.Views.Home
{
public partial class Index : ViewPage
{
}
}
L ISTING 7 C ODE - BEHIND I NDEX . ASPX
ViewPage juga memiliki versi generic. Dalam versi generic, View bisa
inherit dari ViewPage<T>, dimana T adalah tipe data dari class yang akan
kita jadikan sebagai Model. Kelebihan versi generic ini ada pada sifat
strongly-type dari property ViewData.Model yang bisa diakses dari
dalam View. Dengan demikian kita bisa mengambil manfaat dari
23
Sampai saat ini ASP.NET MVC belum memiliki komponen yang bersifat
deklaratif seperti yang sudah banyak tersedia dalam Web Form.
Komponen-komponen seperti textbox, radiobutton, checkbox dan lainlain yang sudah ada dalam Web Form juga tidak bisa digunakan dalam
ASP.NET MVC view karena perbedaan arsitektur antara keduanya. Yang
24
ada saat ini adalah method helper yang bisa digunakan dalam HTML
source secara server-side. Listing 9 menunjukkan contoh penggunaan
helper method untuk me-render sebuah HTML textbox.
<p>
Name: <%= Html.TextBox("name") %>
</p>
L ISTING 9 C ONTOH H ELPER M ETHOD
UNTUK
T EXTBOX
View dalam ASP.NET MVC sifatnya sangat modular. Hal ini karena
arsitektur MVC memberikan batasan yang jelas terhadap tugas dan
tanggung jawab dari Model, View, dan Controller. View hanya
bertanggung jawab terhadap tampilan, dan sama sekali tidak melakukan
tugas-tugas yang berkaitan dengan logic proses bisnis.
Sifat modular ini memungkinkan View bisa dihasilkan oleh templateengine yang berbeda-beda. Dalam ASP.NET MVC, template-engine ini
disebut juga dengan view engine. Secara default, ASP.NET MVC
menggunakan WebFormViewEngine, dimana sintaks penulisan HTML
source-nya sama dengan page dalam Web Form. Selain
WebFormViewEngine, terdapat beberapa jenis view engine lain yang bisa
digunakan. Kita akan membahas hal ini secara detail dalam bab tentang
MvcContrib.
Sebagai kesimpulan, View dalam ASP.NET MVC direpresentasikan dengan
objek-objek yang akan menampilkan content ke user, tanpa memikirkan
25
Kita akan menambahkan Model dalam program Hello World kita. Model
ini berupa list dari objek dalam internal memory, dimana datanya kita
hard-code dalam source code.
Tujuan kita adalah menampilkan produk yang kita definisikan dalam
sebuah List<Product> ke dalam sebuah View. Product adalah class
yang kita definiskan sendiri sebagai abstraksi dari entitas produk. Ikutilah
26
27
... %>
<asp:Content ID="productsContent"
ContentPlaceHolderID="MainContent"
runat="server">
<h2><%= Html.Encode(ViewData["Title"]) %></h2>
<table border="1">
<thead>
<td>Id</td>
<td>Name</td>
<td>Unit Price</td>
<td>Description</td>
</thead>
<% foreach (var product in ViewData.Model) { %>
<tr>
<td><%= product.Id %></td>
<td><%= product.Name %></td>
<td><%= product.UnitPrice %></td>
<td><%= product.Description %></td>
</tr>
<% } %>
</table>
</asp:Content>
L ISTING 12 HTML S OURCE P RODUCTS . ASPX
using System.Collections.Generic;
using System.Web.Mvc;
using HelloWorld.Models;
namespace HelloWorld.Views.Home
{
public partial class Products : ViewPage<List<Product>>
{
}
}
L ISTING 13 C ODE -B EHIND P RODUCTS . ASPX
28
DALAM I NTERNET
E XPLORER
29
C ONTROL / C OMPONENT
Saat ini ASP.NET MVC belum memiliki control yang sifatnya deklaratif
seperti yang sudah ada dalam Web Form. ASP.NET MVC tidak membuat
abstraksi component-model seperti Web Form. Yang ada saat ini dalam
ASP.NET MVC adalah beberapa method helper yang merupakan wrapper
dari penulisan HTML secara server-side.
Tabel berikut ini berisi deklarasi beberapa contoh method helper untuk
control-control yang biasa kita gunakan dalam sebuah form.
Control
Method Helper
<%= Html.TextBox("myTextBox") %>
<%= Html.CheckBox("myCheckBox") %>
<%= Html.RadioButton("myRadioButton", 1) %>
<%= Html.DropDownList("myDropDownList", new
SelectList(new List<string> {"One", "Two"})) %>
<%= Html.ListBox("myListBox", new
SelectList(new List<string> {"satu", "dua"}))
%>
<%= Html.TextArea("myTextArea") %>
30
Dalam Web Form kita sudah mengenal beberapa control yang cukup
kompleks misalnya GridView yang dibuat untuk memudahkan developer
yang hendak menampilkan data dalam bentuk tabular. Saat ini ASP.NET
MVC belum memiliki komponen semacam yang sebanding.
Alternatif yang bisa dilakukan oleh developer ASP.NET MVC saat ini salah
satunya adalah dengan memanfaatkan hasil perkembangan teknologi
ASP.NET AJAX yang saat ini sudah menawarkan client-side data-binding
dengan model client-template. Kita akan melihat lebih jauh kaitan antara
ASP.NET MVC dan ASP.NET AJAX nanti dalam bagian ASP.NET MVC dan
AJAX.
Beberapa project open source juga menambahkan control seperti
GridView yang bisa digunakan dalam ASP.NET MVC. Salah satunya
adalah project MvcContrib yang menyediakan helper method Grid()
untuk membuat sebuah tampilan grid dalam View dengan menerima
parameter Model, dan spesifikasi kolom-kolom yang akan ditampilkan
dalam grid tersebut.
Kita akan menambahkan sebuah View dalam program Hello World kita,
dimana di dalam View ini kita akan mendemokan penggunaan helper
method untuk membuat sebuah form sederhana. Buka kembali solusi
HelloWorld.sln dan ikuti langkah-langkah berikut ini:
1. Buatlah sebuah view bernama EmployeeForm.aspx. Listing 14
menunjukkan HTML source dari EmployeeForm.aspx.
<%@ Page Title="Employee Form"
... %>
<asp:Content ID="employeesContent"
ContentPlaceHolderID="MainContent"
runat="server">
<form method="post" action="/home/employeeform">
<div class="flabel">Name</div>
<div class="fcontent">
<%= Html.TextBox("name",
string.Empty,
new Dictionary<string, object>
{
{ "size", "25"}
}) %>
</div>
<div class="flabel">Gender</div>
<div class="fcontent">
<%= Html.RadioButton("gender", "male") %> male
31
33
Dalam demo di atas kita telah melihat bagaimana method helper untuk
me-render element HTML diimplementasikan dalam ASP.NET MVC. Demo
ini sekaligus juga menunjukan skenario posting sebuah form dalam
ASP.NET MVC. Untuk saat ini ASP.NET MVC belum menyediakan control
yang bersifat deklaratif untuk memudahkan penggunaan control dalam
sebuah view.
34
ASP.NET MVC
DAN
AJAX
Program web yang interaktif saat ini sudah banyak yang menerapkan
AJAX di dalamnya. Seperti kita ketahui bersama AJAX adalah suatu
mekanisme dalam komunikasi antara user-agent (browser) dan server
yang membuat interaksi antara user dan program menjadi lebih baik,
salah satunya dengan membuat program web tersebut menjadi lebih
interaktif.
ASP.NET MVC memudahkan kita untuk membuat program web yang
sudah menerapkan AJAX di dalamnya. Salah satu fasilitas yang disediakan
oleh ASP.NET MVC adalah tersedianya method Json() di dalam
Controller. Method ini akan memberikan result berupa JSON (JavaScript
Object Notation) kepada browser untuk dimanipulasi lebih lanjut di dalam
browser oleh client-script.
Untuk memudahkan pemahaman kita akan ASP.NET MVC dan AJAX, kita
akan melakukan demo dengan cara menambahkan kemampuan AJAX ke
dalam program Hello World. Buka HelloWorld.sln, lalu ikuti langkahlangkah berikut ini:
1. Buatlah sebuah view bernama AjaxDemo.aspx. HTML source view
tersebut terlihat dalam Listing 16.
<%@ Page Title="Ajax Demo" Language="C#"
... %>
<asp:Content ID="ajaxDemoContent"
ContentPlaceHolderID="MainContent"
runat="server">
<script language="javascript"
src="../../Scripts/MicrosoftAjax.js"
type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function getServerData() {
var x = new Sys.Net.WebRequest();
var id = $get("random").value;
x.set_url("/Home/GetJson/" + id);
x.add_completed(function(e) {
$get("message").innerText =
e.get_object().Message;
});
x.invoke();
}
</script>
Enter a number (1-5):
<input type="text" id="random" size="2"/>
<br /><input type="button" onclick="getServerData();"
35
36
DALAM I NTERNET
E XPLORER
Data akan berubah menjadi You enter One seperti terlihat dalam
Gambar 18. Perhatikan bahwa dengan AJAX, berubahnya label
tersebut tidak perlu me-refresh seluruh layar walaupun web browser
melakukan pemanggilan ke server.
Satu lagi yang akan kita demokan berkaitan dengan AJAX adalah
penggunaan AjaxControlToolkit (ACT). ACT menyediakan mekanisme
extender untuk control-control ASP.NET yang berjalan di atas Win Form
dengan menambahkan behaviour client di atasnya. ASP.NET MVC bisa
mengambil manfaat dari ACT dengan cara mengambil behavior client-nya
secara langsung. Bagaimana pun juga implementasi behavior client ini
adalah objek JavaScript, sehingga kita bisa menggunakannya secara
terpisah tanpa kita menggunakan mekanisme control-extender ACT.
Untuk menggunakan ACT, kita perlu mend-download library-nya secara
terpisah. Download library tersebut dari alamat berikut ini:
http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.a
spx?ReleaseId=16488. Gambar 19 menunjukkan pilihan download ACT.
38
40
<p>
<input type="text" id="date" size="10" />
</p>
</asp:Content>
L ISTING 18 HTML
SOURCE
A CT C ALENDAR . ASPX
DALAM
B ROWSER F IREFOX
41
ASP.NET MVC
DAN J Q UERY
jQuery adalah library JavaScript yang bisa kita gunakan untuk membuat
program web yang banyak menggunakan JavaScript untuk pemrosesan
dalam browser. Dibuat oleh John Resig pada awal tahun 2006, saat ini
jQuery merupakan salah satu library JavaScript yang banyak dipakai,
bahkan oleh Microsoft didukung penggunaannya. Kemampuan jQuery
untuk membuat instruksi JavaScript yang singkat dan jelas merupakan
salah satu keunggulannya.
Project-template ASP.NET MVC juga memasukkan library jQuery secara
otomatis di dalam folder Scripts bersama-sama dengan library ASP.NET
AJAX. Visual Studio 2008 juga bisa menampilkan intellisense terhadap
jQuery setelah diterapkan patch KB958502 dan memasukkan file
dokumentasi jQuery sebagai bagian dari project. Kita akan melihat
penggunaan jQuery di dalam ASP.NET MVC dengan melakukan demo hal
yang sama dengan demo dalam bab tentang ASP.NET AJAX.
Pertama kita akan melihat penggunaan jQuery untuk memanggil sebuah
method di server yang mengembalikan objek JSON. Kita akan memakai
method yang sama dengan method yang dipakai dalam demo
sebelumnya tentang ASP.NET AJAX. Ikuti langkah-langkah berikut ini
untuk membuat demo pemakaian jQuery dalam project ASP.NET MVC.
1. Buatlah sebuah view dengan nama jQueryDemo.aspx. HTML source
view tersebut terlihat dalam Listing 20.
<%@ Page Title="jQuery Demo" Language="C#" ... %>
<asp:Content ID="jqueryDemoContent"
ContentPlaceHolderID="MainContent"
runat="server">
<script src="../../Scripts/jquery-1.2.6.js"
type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#jbutton").click(function() {
$.getJSON("/Home/GetJson/"+ $("#random").val(),
function(json) {
$("#message").html(json.Message);
$("#messageArea")
.animate({ fontSize: "18px" }, 1200);
});
});
});
</script>
<h2>jQuery Demo</h2>
Enter a number (1-5):
42
Kita juga akan melakukan hal yang sama dengan jQuery untuk
menampilkan calendar dalam sebuah view. Kalau dalam demo AJAX kita
menyebutnya dengan behavior calendar, dalam demo jQuery ini kita
menyebutnya dengan DatePicker, sesuai dengan nama library jQuery
yang akan digunakan untuk keperluan demo ini.
Library DatePicker tidak di-bundle bersama library jQuery, oleh karena
itu kita harus men-download-nya secara terpisah dari alamat berikut ini:
http://marcgrabanski.com/pages/code/jquery-ui-datepicker. DatePicker
juga bisa didekorasi dengan berbagai macam theme sesuai dengan
kebutuhan tampilan dalam layar. Theme DatePicker bisa di-dowload dari
alamat berikut ini: http://marcgrabanski.com/resources/uidatepicker/theme-pack.zip.
Ikuti langkah-langkah berikut ini untuk bisa menampilkan DatePicker
dalam program Hello World kita:
44
1. Setelah kita men-download file-file yang diperlukan, masukkan filefile tersebut ke dalam project Hello World. Masukkan file
ui.datepicker.js ke dalam sub-folder jQueryUI dalam folder
Scripts. Untuk theme, ekstrak theme-pack.zip, pilih folder
smoothness, lalu masukkan ke folder Content. Carilah icon calendar
dengannama calendar.gif yang bisa kita search di web, lalu
masukkan ke dalam folder Content. Secara keseluruhan susunan
folder kita akan tampak seperti Gambar 24.
DAN
F OLDER
UNTUK
D ATE P ICKER
45
$("#date").datepicker({
showOn: "both",
buttonImage:
"/content/calendar.gif",
buttonImageOnly: true,
duration: "slow"
});
});
</script>
<h2>DatePicker Demo</h2>
<p>
<input type="text" id="date" size="10" />
</p>
</asp:Content>
L ISTING 22 HTML S OURCE D ATE P ICKER . ASPX
46
DALAM
B ROWSER F IREFOX
47
ASP.NET MVC
DAN
TDD
48
View ini akan menampilkan detail dari produk yang diberikan oleh
Controller dalam action-method TddDemo(). Perhatikan bahwa View
ini memiliki Model yang strongly-typed, yaitu Product.
2. Dalam HomeController, buatlah sebuah action-method baru
bernama TddDemo(), seperti terlihat dalam Listing 26.
public ActionResult TddDemo()
{
var product = new Product
{
Id = 1,
49
51
new ControllerContext(fakeContext,
new RouteData(), controller);
actionResult = controller.TddDemo();
Assert.IsNotNull(actionResult);
}
L ISTING 28 C ONSTRUCTOR U NIT T EST ()
52
53
10. Kita jalankan semua test-method yang sudah kita definisikan di atas
dalam Visual Studio 2008. Jika hasilnya sukses, test-result akan
terlihat seperti dalam Gambar 27.
DALAM
Seperti kita lihat dalam demo di atas, ASP.NET MVC memudahkan kita
untuk melakukan unit-testing. Pembagian tugas dan tanggung jawab
yang jelas antar komponen MVC memungkinkan kita melakukan test
terhadap masing-masing komponen. Hal ini mendukung pengembangan
software dengan metodologi TDD.
54
MVCC ONTRIB
MVCContrib adalah project open source yang menambahkan beberapa
fitur dan ekstensi ke dalam ASP.NET MVC. Fitur-fitur tambahan ini
misalnya beberapa method helper untuk memudahkan pengolahan form,
mekanisme dependency injection, sub-controller, view engine tambahan,
dan lain-lain.
Dari semua hal yang terdapat dalam project MVCContrib kita akan
menyinggung dua hal saja yaitu method helper untuk membuat Grid,
dan mencoba salah satu view engine yang ditawarkan MVCContrib yaitu
SparkViewEngine. Fitur-fitur lain bisa dicoba sendiri dengan cara
mendownload source code-nya yang menyediakan sample-sample yang
bisa dijadikan acuan.
GRID
Grid adalah suatu komponen user-interface (UI) yang menyajikan
informasi dalam bentuk tabular, lengkap dengan kemampuan editing dan
paging. Grid termasuk komponen yang sudah pasti dibutuhkan oleh
developer yang mengerjakan program LOB (Line-of-Business). ASP.NET
sudah menyediakan GridView dalam Web Form, dan telah menjadi salah
satu komponen yang banyak dipakai.
ASP.NET MVC saat ini belum memiliki komponen semacam GridView
yang tersedia out-of-the-box dan tinggal dipakai oleh developer. Filosofi
ASP.NET MVC saat ini masih memilih pendekatan yang tidak
menambahkan terlalu banyak abstraksi di atas model pemrograman web
yang stateless. Sehingga model programming komponen seperti yang
ada dalam Web Form masih belum kita jumpai dalam ASP.NET MVC.
Grid dalam MVCContrib adalah sebuah fungsi helper yang cara
penggunaannya mirip dengan fungsi helper HTML lain dalam library
ASP.NET MVC. Kita akan mendemokan penggunaannya dalam program
Hello World. Ikuti langkah-langkah berikut ini:
1. Download binary MvcContrib dari alamat berikut ini:
http://www.codeplex.com/MVCContrib/Release/ProjectReleases.aspx
?ReleaseId=18695. Ekstrak binary MvcContrib.dll dari file yang di55
56
new Product
{
Id = 3,
Name = "Noodle",
UnitPrice = 100m,
Description = "Spicy noodle"
},
new Product
{
Id = 4,
Name = "Ribs",
UnitPrice = 1800m,
Description = "Baked ribs"
},
new Product
{
Id = 5,
Name = "Sozis",
UnitPrice = 700m,
Description = "Creamy sozis"
},
};
return View(products);
}
L ISTING 35 A CTION - METHOD G RID D EMO ()
DALAM I NTERNET
E XPLORER
57
SPARKVIEWENGINE
Arsitektur ASP.NET MVC memberikan pemisahan tanggung jawab yang
jelas antara Model, View, dan Controller. Masing-masing komponen bisa
menggunakan mekanisme sendiri atau framework yang sudah ada selama
interface-nya bisa bekerja sama dengan ASP.NET MVC. Salah satu
pengembangan yang ada di area View adalah View Engine. View Engine
memungkinkan View untuk menggunakan mekanisme template-engine
yang berbeda-beda, sesuai dengan dialek dan spesifikasi masingmasing.
ASP.NET MVC di-bundle dengan View Engine default yaitu
WebFormViewEngine. View Engine ini menggunakan mekanisme template
yang sama dengan page yang dikenal dalam Web Form, sehingga sintaks,
notasi, mekanisme code-behind, page master dan content sama dengan
apa yang biasa digunakan dalam page ASPX dalam Web Form.
MVCContrib datang dengan berbagai jenis View Engine lain yang bisa
digunakan selain WebFormViewEngine. Berikut ini daftar View Engine
yang di-bundle dalam project MVCContrib yang bisa kita gunakan dalam
project-project ASP.NET MVC:
BrailViewEngine
Sebelumnya terkenal dalam dunia Ruby on Rails, dan secara original
merupakan bagian dari project Castle Monorail.
NHamlViewEngine
Sama seperti BrailViewEngine, NHamlViewEngine berasal dari
project Castle Monorail yang bernama Haml, yang kemudian diporting ke .NET sebagai View Engine ASP.NET MVC dengan
menambahkan prefiks N di depan namanya.
NVelocityViewFactory
NVelocityViewFactory adalah hasil porting dari Velocity view
factory dalam project Castle Monorail.
SparkViewEngine
View Engine lain yang dirancang untuk bisa bekerja dengan ASP.NET
MVC dan Ruby on Rails.
58
XsltViewEngine
View Engine sederhana yang melakukan transformasi XML dengan
XSLT menjadi HTML.
Kalau kita lihat banyak di antara View Engine yang di-bundle dalam
MVCContrib berasal dari project Castle Monorail. Hal ini tidak
mengherankan karena salah satu bagian dari project Castle Monorail
adalah framework MVC yang diterapkan dalam bahasa Ruby, yang
dinamakan dengan Ruby on Rails. Framework ini sudah lebih dahulu
populer dibandingkan dengan ASP.NET MVC sehingga sudah banyak View
Engine yang dibuat di atasnya.
Kita akan melakukan demo untuk menggunakan SparkViewEngine
dalam project ASP.NET MVC. Ikuti langkah-langkah berikut ini untuk
melakukan demo tersebut.
1. Ekstrak binary Spark.dll, Spark.Web.Mvc.dll, dan
MvcContrib.dll dari file yang kita download dari alamat
http://www.codeplex.com/MVCContrib/Release/ProjectReleases.aspx
?ReleaseId=18695, lalu masukkan sebagai referensi lokal dari project
Hello World.
2. Masukkan setting SparkViewEngine dalam Web.config, seperti
terlihat dalam Listing 36.
<configSections>
<section name="spark"
type="Spark.Configuration.SparkSectionHandler,
Spark"/>
</configSections>
<spark>
<compilation debug="true">
<assemblies>
<add assembly="HelloWorld"/>
<add assembly="System.Web.Mvc,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<pages>
<namespaces>
<add namespace="System"/>
<add namespace="System.Web.Mvc"/>
<add namespace="HelloWorld.Models"/>
</namespaces>
</pages>
</spark>
L ISTING 36 S ETTING W EB . CONFIG
UNTUK
59
60
DALAM I NTERNET
E XPLORER
61
D EPLOYMENT
Sejauh ini kita menjalankan semua demo dalam solusi HelloWorld.sln
hanya dengan ASP.NET Development Server bawaan Visual Studio 2008
yang akan otomatis dipanggil apabila kita menjalankan solusi kita dari
Visual Studio 2008. Nah, aplikasi yang akan dijalankan untuk melayani
pelanggan dalam dunia nyata pasti akan dijalankan di atas web server
kelas produksi, bukan kelas development. Untuk ASP.NET MVC, kita
punya pilihan untuk melakukan deployment ke web server IIS.
Berkaitan dengan deployment ASP.NET MVC, kita juga perlu
menyinggung fitur baru dari .NET Framework 3.5 SP1 yaitu modul
Routing. Salah satu kelebihan modul Routing adalah kemampuannya
dalam menangani request-path tanpa ekstensi. Sebelumnya kita telah
terbiasa memanggil file-file yang ber-ekstensi ASPX sebagai bagian dari
request-path. Dengan penerapan modul Routing, ekstensi ASPX maupun
ektensi lainnya bukanlah sesuatu yang harus ada dalam sebuah requestpath.
Kemampuan untuk menangani request-path tanpa ekstensi dalam modul
Routing mengharuskan sebuah request ditangani oleh engine ASP.NET.
Apabila IIS tidak dapat menentukan bahwa sebuah request harus
ditangani oleh engine ASP.NET maka IIS akan mencoba menangani
request tersebut. Nah, kalau ternyata IIS sendiri ternyata tidak dapat
menangani request tersebut maka IIS akan memberikan kode status 404
kepada user-agent, yang berarti resource yang diminta oleh request
tersebut tidak dapat ditemukan di dalam web server.
Hal ini menimbulkan masalah yang perlu kita perhatikan pada saat
mencoba melakukan deployment sebuah program web ASP.NET MVC ke
dalam IIS, terutama untuk IIS 6, dan IIS 7 classic mode yang memerlukan
setting khusus apabila hendak dibuat untuk bisa mengenali request-path
tanpa ekstensi.
Kita akan membahas masalah deployment ini ke dalam tiga bagian besar.
Yang pertama adalah deployment IIS 6, dan IIS 7 classic mode yang akan
diwakili dengan pembahasan deployment ke IIS 6 pada Windows Server
2003. Sedangkan yang kedua adalah deployment ke IIS 7 integrated
62
DEPLOYMENT
KE
IIS 6
64
DALAM
R OUTING
HttpContext.Current.RewritePath(Request.ApplicationPath, false);
L ISTING 41 R EWRITE P ATH
DALAM
D EFAULT . ASPX . CS
Gambar 33 dan Gambar 34 menunjukkan hasil pemanggilan requestpath /helloworld/home.mvc/index, & /helloworld/home.mvc/about.
66
DEPLOYMENT
KE
IIS 7 I N T E G R A T E D M O D E
DI
IIS 7
K O N F I G U R A S I IIS 6
UNTUK
R E Q U E S T -P A T H T A N P A E K S T E N S I
69
70
P ENUTUP
ASP.NET MVC adalah implementasi arsitektur MVC pada lingkungan
pemrograman web ASP.NET. ASP.NET MVC memberikan pilihan kepada
developer ASP.NET selain model pemrograman yang sudah ada yaitu Web
Form.
e-Book ini telah memberikan pemaparan tentang arsitektur MVC,
implementasi arsitektur MVC pada ASP.NET, penjelasan masing-masing
komponen MVC dimulai dari Controller, View, sampai dengan Model.
Tidak ketinggalan pembahasan tentang AJAX dan jQuery dalam konteks
ASP.NET MVC juga mendominasi beberapa bab.
Demo yang disertakan dalam e-book ini sengaja penulis buat mudah dan
sederhana agar konsep dasarnya bisa disampaikan dengan singkat dan
mudah.
Apabila ada pertanyaan, saran, koreksi, feedback, maupun tanggapan,
silakan kontak pengarang melalui media-media berikut ini:
1. Website: http://suhanto.com
2. Suhanto @geeks: http://geeks.netindonesia.net/blog/suhanto
3. ASP.NET MVC geeks forum:
http://geeks.netindonesia.net/forums/11107.aspx
4. Email: agus.suhanto@gmail.com
5. Facebook:
http://www.facebook.com/people/Agus_Suhanto/1055552821
71
T ENTANG P ENGARANG
Agus Suhanto menekuni dunia komputer terutama pengembangan
aplikasi web sekaligus sebagai hobi dan pekerjaan sehari-hari.
Lulus dari Teknik Informatika Institut Teknologi Bandung pada tahun
2000, Agus langsung terjun ke dunia industri mengembangkan
berbagai sistem web dalam dunia bisnis. Pengetahuan dan
keterampilan IT-nya ditunjang oleh pengalaman mengembangkan
berbagai sistem web dalam perusahaan yang memiliki karyawan sampai
belasan ribu dengan lokasi yang tersebar di seluruh dunia.
Mulai tertarik kepada arsitektur MVC dan implementasinya dalam
ASP.NET MVC sejak kemunculan ASP.NET MVC Preview 3. Ketertarikan
ini membawa Agus pada keikutsertaannya dalam forum global tentang
ASP.NET MVC yang akhirnya dibawa dalam forum
geeks.netindonesia.net.
Keaktifan di geeks juga membuat Agus menulis banyak posting tentang
ASP.NET MVC dalam geeks blog. Berawal dari posting berseri di geeks
blog inilah Agus kemudian membawa ide untuk menulis e-book
tentang ASP.NET MVC kepada rekan-rekan geeks community leaders.
Ibarat gayung bersambut, ide ini didukung sepenuhnya oleh geeks
community leaders, sehingga jadilah buku tentang ASP.NET MVC yang
berjudul Mengenal ASP.NET MVC.
Menulis juga sudah merupakan salah satu hobi baru Agus sehingga ke
depannya diharapkan akan muncul beberapa e-book baru tentang
pengembangan sistem web maupun dunia IT pada umumnya.
72