J'ai accidentellement vu cette description dans le blog d'un étranger. Lorsque le contrôle de la zone de texte est défini sur lecture seule et que l'activation de la page est définie sur false, la valeur de la zone de texte sera perdue après la soumission. Cela ne se produit que dans asp.net 2.0. cette situation ne se produira pas dans asp.net 1.0/1.1, le code est le suivant :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" EnableViewState="false" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="serveur">
protected void Page_Load (expéditeur d'objet, EventArgs e)
{
if (!this.IsPostBack)
{
this.Textbox1.Text = "texte en lecture seule";
}
}
protected void Button1_Click (expéditeur d'objet, EventArgs e)
{
this.lblMessage.Text = this .Textbox1.Text;
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="serveur">
<title>Page sans titre</title>
</tête>
<corps>
<form runat="server" id="Form1">
<asp:textbox ID="Textbox1" runat="server" ReadOnly="true" ForeColor="silver"></asp:textbox>
<asp:textbox ID= "Textbox2" runat="server" ReadOnly="true">Un peu de texte</asp:textbox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>
</form>
</corps>
</html>
Lors d'une exécution sous .net 2.0, la valeur de la zone de texte sera en effet perdue. Enfin, j'ai trouvé l'analyse MSDN et le centre de commentaires BUG de Microsoft. En fait, ce n'est pas un BUG, mais un petit changement pour la sécurité sous .net 2.0. L'extrait spécifique est le suivant, donc tout le monde comprendra :
Les commentaires de Microsoft sont les suivants :
Après une analyse minutieuse, l’explication du comportement observé est la suivante :
Avec une modification de conception dans ASP .NET basée sur des problèmes de sécurité des utilisateurs, l'entrée d'une zone de texte en lecture seule est enregistrée dans l'état d'affichage, ce qui ne se produit pas si l'état d'affichage est désactivé. Pour contourner ce problème, un développeur de page peut ajouter l'attribut en lecture seule à la zone de texte. Collection .Attributes, qui peut ensuite être utilisée pour accéder à la « valeur » de la zone de texte.
Nous espérons que cela clarifie. Merci.
Serveur Web et outils
Analyse MSDN 2005 :
La valeur Text d'un contrôle TextBox avec la propriété ReadOnly définie sur true est envoyée au serveur lorsqu'une publication se produit, mais le serveur n'effectue aucun traitement pour une zone de texte en lecture seule. Cela empêche un utilisateur malveillant de modifier une valeur Text. en lecture seule. La valeur de la propriété Text est conservée dans l'état d'affichage entre les publications, sauf modification par le code côté serveur.
Source : blog Jackyrong