Di versi ASP.NET 1.x sebelumnya, kontrol TextBox yang disetel ke ReadOnly masih bisa mendapatkan nilai yang dimodifikasi di sisi server setelah nilai diubah di sisi klien. Namun, di ASP.NET 2.0, praktik ini dibatasi. . Hal ini dinilai dapat meningkatkan keamanan aplikasi. Berikut ini adalah metode internal kontrol TextBox untuk mendapatkan data, dari situ kita dapat melihat batasan ReadOnly:
bool virtual yang dilindungi LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
string text1 = ini.Teks;
string text2 = postCollection[postDataKey];
if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
ini.Teks = teks2;
kembali benar;
}
kembali salah;
}
Yang dibatasi disini hanya atribut Text saja, dan tidak ada batasan pada NameValueCollection nama/nilai data yang dikirimkan. Oleh karena itu, nilai tetap dapat diperoleh melalui metode Request["Form Name"] . Contoh berikut sepenuhnya menggambarkan hal ini dan menyediakan cara untuk menggunakan ReadOnly dan memperoleh nilai melalui properti Teks:
<%@ Page Language="C#" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-/ /W3C/ /DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server">
dilindungi void Button1_Click(pengirim objek, EventArgs e )
{
Response.Write("<li>TextBox1 = " + TextBox1.Text);
Response.Write("<li>TextBox2 = " + TextBox2.Text);
Response.Write("<li>TextBox3 = " + TextBox3.Text);
Response.Write("<li>Permintaan.Form[TextBox1] = " + Permintaan.Form[TextBox1.UniqueID]);
Response.Write("<li>Permintaan.Form[TextBox2] = " + Permintaan.Form[TextBox2.UniqueID]);
Response.Write("<li>Permintaan.Form[TextBox3] = " + Permintaan.Form[TextBox3.UniqueID]);
}
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
TextBox3.Attributes.Add("hanya baca", "hanya baca");
}
</skrip>
<tipe skrip="teks/javascript">
//<![CDATA[
fungsi SetNilai Baru()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "Nilai baru TextBox1";
document.getElementById('<%=TextBox2.ClientID %>').value = "Nilai baru TextBox2";
document.getElementById('<%=TextBox3.ClientID %>').value = "Nilai baru TextBox3";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head runat="server">
<title>Kontrol TextBox dan properti ReadOnly dan Enabled di ASP.NET 2.0</title>
</kepala>
<tubuh>
<form id="form1" runat="server">
<span>TextBox1 ReadOnly:</span>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" Text="TextBox1 Nilai Lama"></asp:TextBox><br />
<span>TextBox2 Diaktifkan:</span>
<asp:TextBox ID="TextBox2" runat="server" Enabled="False" Text="TextBox2 Nilai Lama"></asp:TextBox><br />
<span>TextBox3 ReadOnly:</span>
<asp:TextBox ID="TextBox3" runat="server" Text="Nilai Lama TextBox3"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="Ubah nilai baru" OnClientClick="SetNewValue();return false;"
<asp:Button ID="Button1" runat="server" Text="Kirim" OnClick="Button1_Click" />
</bentuk>
</badan>
</html>
Untuk TextBox yang dinonaktifkan, nilai yang diubah tidak dapat diperoleh di sisi server. Jika Anda benar-benar ingin menggunakan atribut ini, gunakan metode menyembunyikan bidang formulir untuk mencapainya.
TextBox dengan atribut ReadOnly akan ditampilkan sebagai tanda di sisi klien:
<input readonly = "readonly">
TextBox dengan atribut Enabled akan ditampilkan sebagai tanda di sisi klien: <input dinonaktifkan = "disabled ">
Menurut spesifikasi W3C: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
Input yang disetel ke nonaktif akan memiliki batasan berikut:
· Tidak dapat menerima fokus · Akan dilewati saat menggunakan tombol tab · Mungkin tidak
Input yang berhasil diatur ke hanya baca akan memiliki batasan berikut:
· Dapat menerima fokus tetapi tidak dapat diubah · Dapat menggunakan tombol tab untuk bernavigasi · Mungkin berhasil
Hanya elemen formulir yang berhasil yang merupakan data valid, yaitu, mereka dapat diserahkan. Atribut nilai kotak masukan teks yang dinonaktifkan dan hanya dapat dibaca hanya dapat diubah melalui skrip.