Dans les versions précédentes d'ASP.NET 1.x, le contrôle TextBox défini sur ReadOnly pouvait toujours obtenir la valeur modifiée côté serveur après la modification de la valeur côté client. Toutefois, dans ASP.NET 2.0, cette pratique était limitée. . Ceci est considéré comme améliorant la sécurité des applications. Voici la méthode interne du contrôle TextBox pour obtenir des données, à partir de laquelle nous pouvons voir les limitations de ReadOnly :
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
chaîne texte1 = this.Text ;
chaîne texte2 = postCollection[postDataKey] ;
if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
this.Text = texte2;
renvoie vrai ;
}
renvoie faux ;
}
Ce qui est restreint ici est uniquement l'attribut Text, et il n'y a aucune restriction sur la NameValueCollection du nom/valeur des données soumises. Par conséquent, la valeur peut toujours être obtenue via la méthode Request["Form Name"]. L'exemple suivant illustre pleinement ce point et fournit un moyen d'utiliser ReadOnly et d'obtenir la valeur via la propriété Text :
<%@ 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">
protected void Button1_Click(object sender , EventArgs e )
{
Response.Write("<li>TextBox1 = " + TextBox1.Text);
Response.Write("<li>TextBox2 = " + TextBox2.Text);
Response.Write("<li>TextBox3 = " + TextBox3.Text);
Response.Write("<li>Request.Form[TextBox1] = " + Request.Form[TextBox1.UniqueID]);
Response.Write("<li>Request.Form[TextBox2] = " + Request.Form[TextBox2.UniqueID]);
Response.Write("<li>Request.Form[TextBox3] = " + Request.Form[TextBox3.UniqueID]);
}
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
TextBox3.Attributes.Add("lecture seule", "lecture seule");
}
</script>
<script type="text/javascript">
//<![CDONNEES[
fonction SetNewValue()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 nouvelle valeur";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 nouvelle valeur";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 nouvelle valeur";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head runat="serveur">
<title>Contrôle TextBox et propriétés ReadOnly et Enabled dans ASP.NET 2.0</title>
</tête>
<corps>
<form id="form1" runat="serveur">
<span>TextBox1 ReadOnly:</span>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" Text="TextBox1 Ancienne valeur"></asp:TextBox><br />
<span>TextBox2 activé:</span>
<asp:TextBox ID="TextBox2" runat="server" Enabled="False" Text="TextBox2 Ancienne valeur"></asp:TextBox><br />
<span>TextBox3 ReadOnly:</span>
<asp:TextBox ID="TextBox3" runat="server" Text="TextBox3 Ancienne valeur"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="Modifier une nouvelle valeur" OnClientClick="SetNewValue();return false;"
<asp:Button ID="Button1" runat="server" Text="Soumettre" OnClick="Button1_Click" />
</formulaire>
</corps>
</html>
Pour TextBox désactivé, la valeur modifiée ne peut pas être obtenue côté serveur. Si vous souhaitez vraiment utiliser cet attribut, utilisez la méthode de masquage du champ du formulaire pour y parvenir.
La TextBox avec l'attribut ReadOnly sera affichée comme une telle marque côté client :
<input readonly = "readonly">
La TextBox avec l'attribut Enabled sera affichée comme une telle marque côté client : <input désactivé="disabled ">
Selon les spécifications du W3C : http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
L'entrée définie sur désactivée aura les restrictions suivantes :
· Ne peut pas recevoir le focus · Sera ignorée lors de l'utilisation de la touche de tabulation · Peut ne pas réussir
Les entrées réussies définies en lecture seule auront les restrictions suivantes :
· Peuvent recevoir le focus mais ne peuvent pas être modifiées · Peuvent utiliser la touche de tabulation pour naviguer · Peuvent réussir
Seuls les éléments de formulaire réussis sont des données valides, c'est-à-dire ils peuvent être soumis. L'attribut value des zones de saisie de texte désactivées et en lecture seule ne peut être modifié que via des scripts.