Kontrol HiddenField, seperti namanya, adalah kontrol server yang menyembunyikan kotak input. Ini memungkinkan Anda menyimpan data yang tidak perlu ditampilkan pada halaman dan tidak memerlukan keamanan tinggi. Mungkin yang menjadi pertanyaan saat ini, mengapa kita masih perlu menggunakan HiddenField padahal kita sudah memiliki mekanisme penyimpanan state seperti ViewState, Session, dan Cookie?
Tujuan penambahan HiddenField adalah untuk membuat penerapan seluruh mekanisme pengelolaan negara menjadi lebih komprehensif. Karena apakah itu ViewState, Cookie atau Session, akan ada saatnya habis masa berlakunya. Misalnya, pengguna harus menyetel ViewState ke false karena kebutuhan tertentu, atau kondisi lingkungan membatasi penggunaan Cookie, atau pengguna sudah tidak aktif. untuk waktu yang lama menyebabkan Sesi berakhir, dll. Saat ini, HiddenField tidak diragukan lagi merupakan pilihan terbaik.
Fungsi kontrol HiddenField hanyalah untuk menyimpan nilai-nilai yang perlu dipertahankan antara pengiriman ke server. Itu dirender sebagai elemen <input type="hidden"/>, dan dapat dibuat menjadi kontrol server HTML standar dengan menambahkan runat="server". Tercantum di bawah ini adalah properti dan peristiwa yang tersedia untuk kontrol server web ASP.NET HiddenField.
<asp:Bidang Tersembunyi
EnableTheming="Benar|Salah"
EnableViewState="Benar|Salah"
ID = "string"
OnDataBinding="Pengendali kejadian DataBinding"
OnDispose="Pengendali kejadian yang dibuang"
OnInit="Pengendali kejadian Init"
OnLoad="Muat pengendali kejadian"
OnPreRender="Pengendali kejadian PreRender"
OnUnload="Bongkar pengendali acara"
OnValueChanged="Pengendali kejadian ValueChanged"
runat="server"
ID Kulit="string"
Nilai = "string"
Terlihat="Benar|Salah"
/>
Karena nilai HiddenField akan dirender ke browser klien, maka nilai ini tidak cocok untuk menyimpan nilai yang sensitif terhadap keamanan. Untuk menentukan nilai pada kontrol HiddenField, gunakan properti Nilai. Perhatikan bahwa itu adalah Nilai dan bukan Teks. Faktanya, HiddenField tidak memiliki properti Teks, yang konsisten dengan penamaan properti tombol standar seperti DropDownList dan CheckBoxList. Dalam metode penamaan properti standar, nilai Teks disajikan kepada pengguna, sedangkan nilai Nilai dikontrol melalui kode. Misalnya, Anda dapat membuat properti Teks DropDownList menampilkan nama pengguna dan Nilainya menyimpan nomor pengguna.
Kode di bawah ini menunjukkan penggunaan dasar kontrol.
<html>
<kepala>
<skrip bahasa="C#" runat="server">
void Button1_Click(pengirim objek, EventArgs e)
{
if (HiddenField1.Value == String.Kosong)
HiddenField1.Nilai = "0";
HiddenField1.Value = (Konversi.ToInt32(HiddenField1.Value)+1).ToString();
Label1.Teks = HiddenField1.Value;
}
</skrip>
</kepala>
<tubuh>
<h3><font face="Verdana">Lapangan Tersembunyi</font></h3>
<form runat=server>
<asp:HiddenField id=HiddenField1 runat=Server />
<asp:Button id=Button1 Text="Klik tombol" onclick="Button1_Click" runat="server" />
Mengklik <asp:Label id=Label1 Text="0" runat=server /> kali
</bentuk>
</tubuh>
</html>
Dalam kode di atas, <asp:HiddenField id=HiddenField1 runat=Server /> mendefinisikan kontrol tersembunyi yang menghitung jumlah klik pengguna dalam peristiwa klik tombol, dan menetapkan jumlah perubahan pada Label1.
atas
menjadi <input type=hidden id=HiddenField1 runat=Server>
browser Kode akan mendapatkan informasi berikut:
<form name="Form1" method="post" action="Default.aspx" id="Form1">
Ini karena HiddenField mengirimkan data melalui protokol HTTP, jadi jika Anda membuka halaman formulir baru melalui "method="get" atau tautan, HiddenField tidak tersedia.
Selain itu, HiddenField tidak menggantikan Sesi untuk mempertahankan status. Pada contoh di atas, meskipun Anda mengklik tombol satu kali untuk menampilkan jumlah klik, bukan berarti tombol tersebut dapat mencatat informasi status Anda. Jika Anda membuka kembali browser, Anda masih akan melihat 0 di sini, bukan 3.
Acara HiddenField
HiddenField yang lebih umum digunakan adalah peristiwa ValueChanged, yang dipicu ketika Nilai berubah. Namun dalam penggunaan sebenarnya, Anda harus mengetahui urutan pencatatan halaman. Selama proses postback halaman, Anda dapat memeriksa siklus halaman tertentu di situs web berikut
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
Contoh berikut mengilustrasikan masalah ini
<head>
<skrip runat = "server" bahasa = "c#">
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{ Response.Write("<p>Peristiwa Page_Load pada halaman dipicu, dan waktu pemicunya adalah: " + DateTime.Now.ToString());
if (HiddenField1.Value == String.Kosong)
HiddenField1.Value = "0"; }
protected void Button1_Click(pengirim objek, EventArgs e)
{ Response.Write("<p>Button1_Click adalah peristiwa yang dipicu sebelum mengubah nilai Tersembunyi. Waktu pemicunya adalah: " + DateTime.Now .ToString( ));
HiddenField1.Value = (Konversi.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = HiddenField1.Value;
}
protected void HiddenField1_ValueChanged(pengirim objek, EventArgs e)
{ Response.Write("<p>Peristiwa ValueChanged HiddenField dipicu, dan waktu pemicunya adalah: " + DateTime.Now.ToString()) ; }
</skrip>
</head>
<body>
<form id="form1" runat="server">
<div> <asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />
</div> <asp :Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text=" Tombol" />
</form></body>
</html>
Dalam contoh ini, hasil yang kita inginkan adalah: ketika pengguna mengklik tombol, Nilai HiddenField1 diubah melalui peristiwa Button1_Click pada tombol, dan kemudian peristiwa HiddenField1_ValueChanged dari HiddenField1 dipicu.
Jalankan kode di atas dan dapatkan hasilnya. Seperti yang Anda lihat, Tombol mengubah nilai HiddenField setiap kali diklik, tetapi output yang kami tentukan di HiddenField1_ValueChanged tidak dijalankan Peristiwa ValueChanged. Untuk memahami masalah ini, Anda juga perlu memahami siklus deklarasi halaman. Selama siklus halaman, Anda dapat melihat bahwa properti kontrol dibaca atau diinisialisasi di Page_Init, dan kemudian peristiwa Kontrol.
Yang dimaksud dengan event disini adalah: Pada event Page_Init, halaman web akan menerima data yang dikembalikan oleh pengguna, misalnya menetapkan <span id="Label1">Label</span> ke atribut Teks dengan ID Label1, dan <input type Nilai ="hidden" name="HiddenField1" id="HiddenField1" value="0" /> ditetapkan ke properti Nilai HiddenField1. Setelah semua inisialisasi selesai, halaman mulai menjalankan acara kontrol - Button1_Click, dan mengubah Nilai HiddenField di acara Button. Jadi karena Value telah diubah di sini, mengapa event ValueChanged tidak dijalankan?
Saat ini, meskipun nilai Nilai telah diubah di sini, namun disimpan di Page_Init. Hal ini karena ketika tombol Tombol diklik, meskipun HiddenField diubah, balasan halaman juga terpicu lagi, meskipun demikian. HiddenValue sebelumnya Nilainya adalah 0, dan kali ini nilainya diubah menjadi 1. Namun, setelah halaman diposting kembali, karena ViewState akan menyimpan instalasi terakhir (di sini 1), maka di Page_Init, nilai awal HiddenField dianggap menjadi 1, dan kali ini waktunya masih 1, yang membuat data terasa tidak berubah, sehingga event ValueChanged tetap tidak terpicu.
Tentu saja, Anda dapat menonaktifkan HiddenField untuk diproses, dan Anda dapat menjalankan ValueChanged event, namun nyatanya setelah Anda menonaktifkan ViewState, halaman tersebut tidak lagi menyimpan nilai ViewState, sehingga halaman tersebut menganggap setiap permintaan HiddenField adalah baru, seperti kode berikut:
Anda tidak mengubah nilai Hiddenfield, namun tetap dijalankan setiap saat.
<%@ Halaman EnableViewState="false" %>
<kepala>
<script runat="server" Language="c#">
dilindungi void Page_Load(pengirim objek, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "111"
;
protected void Button1_Click(pengirim objek, EventArgs e)
{ // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Teks = TextBox1.Teks; }
dilindungi kekosongan HiddenField1_ValueChanged(pengirim objek, EventArgs e)
{ Response.Write("Berubah." + DateTime.Now.ToString());
Respon.Tulis(HiddenField1.Value);
Respon.Write(TextBox1.Text)
;
</kepala>
<body>
<form id="form1" runat="server"> <div>
<asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />
</div>
<asp:Label ID= "Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:TextBox runat=ID server=TextBox1></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body >
</html>
Menggunakan HiddenFile dikombinasikan dengan halaman "Cross Page" yang disediakan oleh ASP.NET2.0 dapat mewujudkan transfer data halaman. Situasi ini untuk solusi seperti ini:
Di halaman registrasi, pengguna perlu memasukkan data. Karena mungkin ada banyak data di kolom keterangan, kontrol yang mirip dengan FreeTextBox dapat digunakan di jendela baru untuk memungkinkan pengguna memformat teks, dan setelah input. selesai, kembali ke halaman pendaftaran semula. Mengenai situasi ini, kami akan memperkenalkannya nanti