Comment conserver le texte D'une zone de texte en lecture seule après PostBack ()?

J'ai un ASP.NET {[0] } et je veux que ce soit ReadOnly. (L'utilisateur le modifie en utilisant un autre contrôle)

Mais quand il y a un PostBack(), le texte est réinitialisé à une chaîne vide.

Je comprends que si vous définissez la propriété ReadOnly sur True d'un TextBox son contenu n'est pas sauvegardé via PostBack().

Existe-t-il un moyen de conserver le contenu après PostBack() et de rendre le TextBox non modifiable par l'utilisateur?

J'ai essayé de définir la propriété Enabled sur False, mais toujours le contenu ne sauve pas après PostBack().

25
demandé sur Frost_Mourne 2011-09-27 18:17:08

7 réponses

Une autre solution que j'ai trouvée et plus facile:

Ajoutez ceci à la méthode de chargement de Page:

protected void Page_Load(object sender, EventArgs e)
{
     TextBox1.Attributes.Add("readonly", "readonly");
}
51
répondu Youssef 2018-09-21 04:58:18

Demandez à votre autre contrôle de stocker la valeur dans un champ caché, et lors de la publication, tirez la valeur du champ caché et poussez-la dans la zone de texte côté serveur.

6
répondu The Evil Greebo 2011-09-27 14:21:39

txtStartDate.Attributes.Add("readonly", "readonly"); sur pageload dans le meilleur des meilleures solutions ,à la place ou Javascripts, variables cachées, cache, cookies, sessions et Caches.

2
répondu Jay 2012-02-24 17:15:48

Récupère la valeur en utilisant Request.Form[txtDate.UniqueID]. Vous l'obtiendrez !!

1
répondu Nitin 2014-04-11 11:31:11

J'ai eu ce même problème mais en utilisant la liaison Knockout 'enable' et ASP.Net texte de contrôle du serveur.

De Cette façon:

<asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="value: city, enable: !hasZipCode()"></asp:TextBox>

Toutefois, lorsque le formulaire a été soumis cette valeur de champ était toujours vide. Cela s'est produit, je suppose, parce que si le contrôle est désactivé, il n'est pas persistant sur la chaîne ViewState.

J'ai résolu de remplacer bindig 'enable' par 'attr{ readonly: hasZipCode}'

    <asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="attr{ value: city, readonly: hasZipCode }">/asp:TextBox>
0
répondu Rodrigo 2014-09-09 22:38:39

Voici un moyen de le faire avec javascript dans l'événement onfocus de la zone de texte elle-même.

Faire comme ça avec javascript a l'avantage que vous n'avez pas besoin de faire dans le code derrière, qui peut être difficile si vous devez le faire dans gridviews ou similaire.

Ce code javascript n'est testé que sur Internet Explorer et certaines parties de celui-ci ne fonctionneront que sur IE, comme par exemple la partie createTextRange qui est là juste pour que le curseur se termine au début du texte dans la zone de texte, mais cette partie peut être ignorée si pas nécessaire.

Si le noyau de cette technique fonctionne sur d'autres navigateurs, alors il devrait être possible de rendre le code du navigateur croix. Le noyau de l'idée ici est le flou après le réglage en lecture seule, puis un délai d'attente pour définir à nouveau la mise au point.

Si vous définissez uniquement readonly, il ne devient readonly que la prochaine fois que vous donnez le focus Textbox.

Et bien sûr, le code peut être mis dans une fonction qui est appelée avec "ceci" comme argument.

  <asp:TextBox 
    ID="txtSomething" 
    runat="server"
    Text='<%# Bind("someData") %>'
    onfocus="
var rng = this.createTextRange();
rng.collapse();
rng.select();
if (this.allowFocusevent=='0') {return;};
this.allowFocusevent='0';
this.readOnly=true;
this.blur();
var that=this;
setTimeout(function(){that.focus()},0);
"
  />
0
répondu Magnus 2015-04-23 04:41:26

Définissez la propriété ContentEditable de textbox sur false ContentEditable= "false".. Il ne vous permettra pas d'éditer le contenu de la zone de texte ie; rendra la zone de texte en lecture seule et fera également la valeur rester dans la zone de texte après la publication.. Je pense que c'est la façon la plus simple de le faire..

-1
répondu sona 2012-04-10 12:46:23