Saturday, January 12, 2008 6:38 AM dede

ViewPage<Generic> on Inline ASPX

Inline ASPX merupakan cukup nyaman bagi web designer membuat perubahan dalam penampilan ke client(web browser).
Cukup dengan notepad atau text-processing sederhana dengan cepat menyelesaikan pekerjaan.

Pada ASP.Net MVC kita tetap dapat menggunakan fitur ini dan yang menarik kita bisa meng-inherits dari ViewPage<T>.
Buat apa kita menggunakan Generic untuk itu? simple saja, dalam MVC kita selalu loose-couple antara layer Controller dan View-nya. Oleh karena itu kita mem-pass data dengan ViewData object.
Karena Inline ASPX akan di-code-dom-kan oleh ASP.Net runtime kemudian di compile secara automatic, maka ia perlu mengerti akan ViewData object. Dengan men-declaration pada tag Inherits, code-dom akan mengetahui objet apa itu.
Kalau pada code-behind compile sudah cukup cerdas meng-compile generic, tapi tidak di asp.net runtime(mungkin di versi mendatang Smile). Lagi pula Intellisense tidak akan bekerja bila ViewData object tidak di beritahukan pada background-compiler Visual Studio.

Jadi kita perlu melakukan conversi, seperti di bawah:

//from
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<string>" %>
//became
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage`1[[System.String,mscorlib]]" %>

Untuk single Generic
//code-behind 
System.Web.Mvc.ViewPage<string>
//inline
System.Web.Mvc.ViewPage`1[[System.String,mscorlib]]

Untuk multi Generic
//code-behind
System.Web.Mvc.ViewPage<int,string>
//inline
System.Web.Mvc.ViewPage`2[[System.Int32,mscorlib],[System.String,mscorlib]]

Untuk Collection Generic
//code-behind
System.Web.Mvc.ViewPage<List<string>>
//inline
System.Web.Mvc.ViewPage`1[[System.Collections.Generic.List'1[[System.String,mscorlib]],mscorlib]]

Jadi pertanyaan, sepertinya aneh men-declaration seperti itu.
Walau agak jarang kita melihat-nya(sering kalau suka meng-debug pada object level -- mirip anonymous types -- Big Smile), ini merupakan CLR notasi.

ParentType`1[ [ChildType, ChildTypeAssembly]]
note:
ParentType adalah generic object yang kita gunakan.
`1[ ] adalah tanda generic-nya sendiri, perhatikan (`) tanda ini kebanyakan suka terbalik dengan (')atau(`). Penting karena compiler mengetahui maksud tanda tersebut. Juga angka 1, ini merupakan sign parameter -- dalam context ini generic signature. Contoh di atas menjelaskan lebih -- multi generic.
[ChildType, ChildTypeAssembly] adalah type apa yang di generic-kan (ChildType) dan dari assembly mana (ChildTypeAssembly). Jadi mirip penggunaan meng-load dynamic type seperti pada reflection.

Inline ASPX dalam MVC tentu lebih menyenangkan. MVC menyajikan 'kebersihan' dari view(html) dengan drawback tidak adanya postback lagi seperti pada WebForm. Dan ViewEngine pada ASP.Net MVC merupakan webform yang di buat sesederhana mungkin.
Enjoy the ~MVC~.
Share this post: | | | |
Filed under: , ,

Comments

No Comments