Selasa, 16 Desember 2008

Ajax Upload dengan Hidden IFrame

Salah satu permasalahan pada ASP.NET AJAX Update Panel adalah tidak dapat melakukan asynchronous communication pada proses upload file. Hal ini disebabkan karena pada dasarnya object XMLHttpRequest (XHR) tidak dapat mengirimkan sebuah file dengan alasan keamanan. Pada beberapa situs seperti Google Mail dan Community Server tetap dapat melakukan upload file tanpa me-refresh seluruh halaman.
Solusi Alternatif
Saah satu alternatif cara untuk melakukan upload tanpa harus me-refresh seluruh halaman adalah menggunakan IFrame yang tersembunyi (hidden IFrame). Pada halaman utama disisipkan sebuah iframe yang berisi sebuah halaman kosong dan pada form target halamannya diarahkan ke halaman kosong yang ada di dalam iframe tersebut. Dengan cara ini hanya bagian IFrame saya yang akan melakukan komunikasi dengan server tanpa mempengaruhi keseluruhan halaman.
Langkah langkah trik ini adalah sebagai berikut.
1. Tambahkan hidden IFrame pada halaman dan set sembunyikan dengan style="display:none".
[code:html]

[/code]
2. Buat file blank.htm pada sollution.
File ini dibutuhkan untuk memastikan bahwa IFrame masih dalam lingkup domain yang sama dengan halaman utama. Jika file blank.htm berada di luar domain (misal default blank.htm yang ada di komputer lokal) maka akan ada penolakan hak akses terhadap eksekusi script di luar domain.
3. Tambahkan kontrol FileUpload ke dalam form
[code:html]

[/code]
4. Buat fungsi submitForm yang berfungsi melakukan submit terhadap hidden IFrame.
[code:js]
// Fungsi memiliki dua parameter yang berisi referensi element IFrame
// dan element ID control FileUpload
function submitForm(frameName,upload){
// Diasumsikan bahwa halaman utama adalah default.aspx
document.forms[0].action="default.aspx"
// Inti dari trik ini adalah mengeset target form ke hidden IFrame
document.forms[0].target=frameName;
// setTimeout digunakan untuk mengupdate dokumen dengan thread yang terpisah,
// jika tidak maka dokumen tidak akan baru terupdate setelah download selesai.
window.setTimeout(function(){
var uploadE=document.getElementById(upload);
uploadE.parentElement.appendChild(document.createTextNode(uploadE.value));
uploadE.parentElement.replaceChild(uploadE.cloneNode(true),uploadE);
},100);
document.forms[0].submit();
}
[/code]
5. Buat tombol dan tambahkan attribute onclick untuk memanggil fungsi submitForm yang telah dibuat sebelumnya.
[code:html]

[/code]
6. Tambahkan web kontrol label yang akan diisi dengan jam pertama kali halaman dimuat,
[code:html]

[/code]
7. Pada code behind, saat Page_Load set label dengan jam berjalan dan cek jika ada file yang diupload, simpan ke dalam server.
[code:c#]
protected void Page_Load(object sender, EventArgs e)
{
lblTime.Text = DateTime.Now.ToLongTimeString();
if (fileUpload1.HasFile)
{
fileUpload1.SaveAs(Server.MapPath("App_Data/") + fileUpload1.FileName);
}
}
[/code]
8. Selesai
Dari langkah-langkah tersebut di atas, secara lengkap kode dapat dilihat sebagai berikut.
File default.aspx
[code:html] <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="HiddenIFrameUpload._Default" %>



Untitled Page












[/code]
File default.aspx.cs
[code:c#]
using System;
using System.Web;
namespace HiddenIFrameUpload
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblTime.Text = DateTime.Now.ToLongTimeString();
if (fileUpload1.HasFile)
{
fileUpload1.SaveAs(Server.MapPath("App_Data/") + fileUpload1.FileName);
}
}
}
}
[/code]

Referensi:
http://www.masykur.web.id/category/ASPNET.aspx

ASP.NET INTRODUCTION

ASP.NET adalah teknologi baru dalam pemrograman web yang merupakan kelanjutan dari teknologi ASP 3.0 yang merupakan server side script (web script yang akan diolah di server, dan hasilnya akan ditampilkan di klien dalam bentuk html). Perbedaan utama dibanding ASP klasik adalah penggunaan .NET framework sebagai fondasi pemrograman (Ruth, 2005).

ASP.NET memiliki beberapa karakteristik dibandingkan teknologi terdahulu, antara lain:


1. Bahasa ter-compile
ASP.NET adalah bahasa yang ter-compile sehingga source-code aman dari para pencuri script, bahkan jika source .aspx bisa tercuri, source code-behind tetap aman karena yang dipublikasikan di internet hanya .dll-nya saja. Maka dari itu, ASP.NET bukan lagi disebut website, melainkan WebApps, atau Web Application karena bersifat seperti applikasi-aplikasi desktop.


2. Pendukung bahasa yang lebih baik
Dengan adanya arsitektur code-behind, pengembang ASP.NET dapat memprogram front-end/disain web dengan ASP.NET dan back-end dengan VB>NET/C++/C#/ JScript, dan mereka dapat saling berinteroperasi. Jadi, jika dalam satu tim ada programmer yang berbeda keahlian, yang satu C-guru dan yang satu VB-master, mereka kini bisa bekerja di proyek yang sama tanpa berselisih.


3. Kemampuan meningkat
Tentu saja ini adalah hal yang pasti sebagaimana layaknya suatu peningkatan dari produk lama. Kenaikan kemampuan ini juga diakibatkan oleh kode ter-compile arsitektur di atas, di mana kini ASP.NET hanya melakukan instalasi satu kali, yaitu pada saat situsnya dipanggil pertama kali dan masuk ke dalam memori server sehingga bila ada permintaan lain dia sudah siap untuk beroperasi.


4. Pengendali terprogram
ASP.NET memperkenalkan pengendali web. Dengan pengendali web, kita dapat membuat pengendali/komponen kita sendiri yang dapat digunakan di halaman yang berbeda-beda. Komponen-komponen ini dapat dengan mudah diprogram dengan sesuka hati.


5. Event driven
ASP.NET mengetahui kejadian yang terjadi pada sebuah halaman situsnya sehinga kejadian seperti onLoad, onClick, onMouseOver, onChange, dan lain-lain dapat ditangani dengan mudah.


6. XML friendly
ASP.NET atau .NET framework sangat akrab dengan XML. Ini sangat mempermudah berbagai aspek, misalnya dalam konfigurasinya ASP.NET memiliki file konfigurasi yang berbasis XML dan dapat diubah dan digunakan dengan mudah.


7. Higher scalability
Komunikasi antar-server dapat dengan mudah dilakukan dalam lingkungan web.


8. Deployment dengan mudah
Server tidak perlu dinyalakan ulang untuk kode yang baru. ASP.NET dengan mudah melangsungkan kembali semua permintaan ke kode yang baru.


9. Autentikasi pengguna, account dan peran
ASP.NET mendukung autentifikasi berbasis bentuk, termasuk cookie management, dll, dan autorisasi pengguna otomatis secara langsung ke halaman yang disediakan. Pembuatan halaman masuk sendiri juga dapat dengan mudah dilakukan. ASP.NET juga mengizinkan account dan peran sehingga dapat dengan mudah redirect sebuah account dengan peran manajer ke kode yang berbeda dengan peran operator contohnya.


10. Caching
ASP.NET dapat meng-cache objek dan keluarannya sehingga dapat mempercepat proses dan pengguna tidak terlalu sering meminta benda yang sama dari server.


11. Arsitektur postback
ASP.NET menggunakan kejadian postback, yaitu menggunakan halaman itu sendiri sebagai pemroses data. Contoh dalam ASP sering kali terlihat bahwa sebuah halaman harus mengirim data ke halaman yang lain untuk diolah, tetapi ASP.NET dapat melakukan semua itu dengan halaman itu sendiri.


12. Kompatibilitas dengan ASP
ASP.NET tidak searatus persen kompatibel dengan ASP, tetapi dengan penamaan file .aspx, ASP dan ASP.NET dapat berjalan berdampingan di satu server dengan baik, bahkan saling berinteroperasi. Selain perbedaan-perbedaan di atas, masih banyak lagi perbedaan-perbedaan dan kelebihan-kelebihan ASP.NET dan ASP.


Referensi:

http://graphicophat.org

Hardcode Web Object for ASP.NET

Pemrograman web memanfaatkan development tools seperti visual studio memang begitu memudahkan. Dengan IDE yang tidak berbeda dengan pemrograman windows desktop membuat pengembangan pemrograman web tinggal klik klik memanfaatkan mouse. Menurut penilaian saya tools ini sangat membantu para programer desktop windows untuk beralih ke web dan para beginer lebih mudah lagi untuk terjun ke pemrograman web. Namun bagaimana dengan para programmer yang sudah terbiasa dengan pemrograman hardcode alias bermodal text editor seperti ultra edit, edit plus, notepad+ atau bahkan notepad? Tentunya ada yang berfikiran dengan pemrograman web visual studio terasa lebih mudah. Tapi untuk yang terbiasa cepat dengan memiliki modal tamplate dan module sebelumnya tentunya hal itu tidak menjamin berpndah ke visual menjadi lebih mudah. Dari situ saya mencoba mengembangkan sebuah framework untuk pemrograman asp.net yang dapat dibuat secara hardcore dengan mudah , cepat dan secure tentunya. Dibuatlah Hardcode Web Object (HWO) for ASP.NET 2 .
Saat ini HWO sendiri saya anggap masih belum final dan penggunaannya masih untuk kebutuhan internal. Meskipun demikian ke depan saya ingin framework ini dijadikan freeware atau bahkan opensource.
Sesuai dengan namanya HWO atau Hardcode web object merupakan sebuah framework dalam bentuk object class yang dapat digunakan untuk mengembangkan aplikasi web secara cepat, dimana HWO telah menyedikan berbagai object dan fungsi untuk menghasilkan berbagai jenis tampilan web seperti :
1. Database Grid dengan dukungan template, page navigation, shorting, searching
2. Database form add, edit delete
3. Master detail
4. Treeview
5. Template design
6. Authentication & security
7. Ajax
Tanpa harus menmpelkan berbagai web komponen secara visual, program yang dibuat akan jauh lebih pendek dan efesien. Dan untuk membuat page, konsep “Copy and paste” masih dapat dimanfaatkan. Dengan konsep ini pembuatan program tanpa Visual Studio pun bisa!.
Saat ini HWO masih memiliki bug (banyak), untuk itu belum siap untuk di publikasikan. Mudah- mudahan dalam jangka waktu pendek dapat di share.