Selasa, 11 Maret 2008

Embedded web resource di ASP.Net

Ini post saya yang pertama membahas tentang .NET, mohon maaf jika ada kesalahan (maklum langsung code di sini, ga pakai Visual Studio).

Ketika membuat aplikasi ASP.NET kadang saya membuat project Web Control Library yang isinya user controls yang tidak ingin saya expose code nya ke developer lain. User control tersebut membutuhkan code javascript yang ada pada file terpisah, atau file-file image. Jika user control ini digunakan dalam web form yang ada pada project terpisah atau pada solution yang lain, file-file javascript atau image tersebut harus diikutsertakan juga. Hal ini sepertinya agak merepotkan (setidaknya untuk saya).

Supaya yang dideploy hanya single file assembly, file javascript dan image tersebut dapat di-embed sebagai embedded resource ke dalam assembly. Caranya adalah:

Untuk setiap file yang akan di-embed sebagai embedded resource, di Visual Studio ubah property Build Action dari file tersebut menjadi Embedded Resource.

Kemudian daftarkan file tersebut pada AssemblyInfo.cs supaya HTTP handler dapat mengaksesnya melalui WebResource.axd, dengan syntax:

[assembly:WebResource("namespace.filename", "content-type")]

Misalnya untuk namespace MyWebControl.Validator dan nama file javascript yang akan di-embed adalah LengthValidator.js, maka penulisannya menjadi:

[assembly:WebResource("MyWebControl.Validator.LengthValidator.js", "text/javascript")]

Sampai di sini, jika project web control library di-build akan menghasilkan satu file DLL yang di dalamnya sudah di-embed file javascript yang disebutkan tadi. Misalkan nama file DLL yang dihasilkan adalah LengthValidator.dll

Untuk meng-consume resource, dilakukan dengan cara seperti halnya meng-inject sebuah file javascript ke dalam web form dengan memanggil method Page.ClientScript.RegisterClientScriptInclude:

Page.ClientScript.RegisterClientScriptInclude(
"LengthValidator",
Page.ClientScript.GetWebResourceUrl(typeof(LengthValidator),
"MyWebControl.Validator.LengthValidator.js"));

Kalau diperhatikan di atas, perbedaan antara meng-inject sebuah file javascript biasa dengan file javascript sebagai embedded resource adalah pada parameter kedua dari method RegisterClientScriptInclude. Biasanya untuk meng-inject sebuah file javascript, parameter ini diisi dengan nama file javascript, tetapi karena yang di-inject adalah embedded resource, maka gunakan method GetWebResourceUrl.



Jika file javascript yang akan di-embed berada dalam folder lain (bukan folder root project), sebutkan nama folder tersebut ketika file tersebut didaftarkan di AssemblyInfo.cs. Misalkan file javascript LengthValidator.js berada dalam folder bernama scripts:

[assembly: WebResource("LengthValidator.scripts.LengthValidator.js", "text/javascript")]

Serupa dengan di atas, untuk mengambil javascript yang sudah di-embed tersebut dengan menyebutkan nama folder tadi:

Page.ClientScript.RegisterClientScriptInclude(
"LengthValidator",
Page.ClientScript.GetWebResourceUrl(this.GetType(),
"LengthValidator.scripts.LengthValidator.js"));


ok slamat mencoba, pizzz

Tidak ada komentar: