Les zones de texte perdent leur valeur lors du retour

J'ai environ 4 boîtes de texte sur ma page Web … certains sont asp: les boîtes de texte tandis que d'autres sont type d'entrée = "texte".

La zone de texte d'entrée est remplie via un contrôle de calandre popup javascript alors que la zone de texte asp.net est remplie en tapant. Les valeurs initiales de ces zones de texte sont récupérées à partir d'une base de données.

Lorsqu'un utilisateur modifie ces valeurs, ils ne sont pas sauvegardés et les zones de texte sont effacées après l'activation du bouton de soumission. Aidez-nous à résoudre cette confusion. Merci.

Merci pour votre réponse, mais ça ne fonctionne toujours pas …..

J'ai mis ce code dans mon événement de chargement de page

if (Page.IsPostBack) { if (ViewState["stock"] != null) TextBoxMaterial.Text = ViewState["stock"].ToString(); if (ViewState["supplier"] != null) TextBoxSupplier.Text = ViewState["supplier"].ToString(); if(ViewState["matTime"] != null) TextBoxMatTime.Text = ViewState["matTime"].ToString(); if(ViewState["prodTime"] != null) TextBoxProdTime.Text = ViewState["prodTime"].ToString(); if (ViewState["shipTime"] != null) TextBoxShipTime.Text = ViewState["shipTime"].ToString(); if(ViewState["cmr"] != null) cmrDue.Value = ViewState["cmr"].ToString(); if(ViewState["kc"] != null) kcDue.Value = ViewState["kc"].ToString(); } 

Et met également le code ci-dessous dans l'événement onclick pour le bouton

 ViewState["stock"] = TextBoxMaterial.Text; ViewState["supplier"] = TextBoxSupplier.Text; ViewState["matTime"] = TextBoxMatTime.Text; ViewState["prodTime"] = TextBoxProdTime.Text; ViewState["shipTime"] = TextBoxShipTime.Text; ViewState["cmr"] = cmrDue.Value.ToString(); ViewState["kc"] = kcDue.Value.ToString(); string prodLine = DDProdLine.SelectedValue; string stock1 = DDMaterial.SelectedValue; string stock2 = ViewState["stock"].ToString(); string supplier = ViewState["supplier"].ToString(); string billet = RBBillet.SelectedValue; string matTime1 = ViewState["matTime"].ToString(); string matTime2 = DDMatTime.SelectedValue; string prodTime1 = ViewState["prodTime"].ToString(); string prodTime2 = DDProdTime.SelectedValue; string shipTime1 = ViewState["shipTime"].ToString(); string shipTime2 = DDShipTime.SelectedValue; CultureInfo cultureInfo = CultureInfo.CurrentCulture; string format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString(); string cmr = ViewState["cmr"].ToString(); string kc = ViewState["kc"].ToString(); string x = cmr.Substring(3, 2); string y = cmr.Substring(0, 2); string z = cmr.Substring(6, 4); string x1 = kc.Substring(3, 2); string y1 = kc.Substring(0, 2); string z1 = kc.Substring(6, 4); string finalCmr = x + "/" + y + "/" + z; string finalKC = x1 + "/" + y1 + "/" + z1; DateTime dt = DateTime.ParseExact(finalCmr, format, cultureInfo); DateTime cr = DateTime.ParseExact(finalKC, format, cultureInfo); string custDate = dt.ToString("dd/mm/yyyy"); string kcDate = cr.ToString("dd/mm/yyyy"); string id = Request.QueryString["id"]; bool success = true; TextBoxProdComment1.Text = stock2 + "," + supplier + matTime1 + "," + prodTime1 + "," + shipTime1 + "," + custDate + "," + kcDate; try { success = CRTopButtons.SaveProdTable(id, prodLine, stock1, supplier, billet, matTime1, matTime2, prodTime1, prodTime2, shipTime1, shipTime2, custDate, kcDate); } catch (Exception e) { TextBoxProdComment2.Text = e.Message; System.Diagnostics.Trace.Write(e.StackTrace); } 

Les boîtes de texte sont encore claires et aucune de celles-ci n'est disponible ……….

Aidez-vous

J'ai eu un problème similaire et La solution à "Perdre des données modifiées par javascript pendant le retour" est mieux décrite par cet article ViewState et Readonly Property of Textbox

Par exemple, disons que nous avons ce contrôle asp.net:

 <asp:TextBox ID="txtName" runat="server" EnableViewState= "false" ReadOnly="true" /> 

Si vous modifiez la valeur de ce contrôle par javascript dans le côté client, il ne sera pas propagé par postback dans le serveur … quoi que vous fassiez avec javascript, sauf si vous supprimez readonly = "true". Maintenant, il existe une solution à ce problème tel que décrit dans l'article ci-dessus.

Il suffit de mettre cela dans l'événement PageLoad

 if (!IsPostBack) txtName.Attributes.Add("readonly","readonly"); 

et tu as fini. N'oubliez pas de supprimer ReadOnly = "true" ou Enable = "false" si votre intention était de désactiver le contrôle de l'édition, utilisez simplement l'extrait ci-dessus. N'oubliez pas de supprimer Enable = "false" si vous le mettez.

Une autre chose que j'ai rencontré … Si vous utilisez un contrôle de zone de texte ASP.NET (par exemple) et c'est READONLY ou DISABLED, le postback n'attrapera pas la valeur modifiée.

Par mon problème, je changeais la valeur du contrôle par javascript et même si le navigateur a rendu la modification, sur le postback, le contrôle conservait toujours la valeur d'origine.

On dirait aussi un problème commun … javascript lance un contrôle personnalisé du calendrier ASCX et le résultat est injecté par javascript dans la zone de texte. Les utilisateurs ne doivent pas être autorisés à modifier directement la valeur de la boîte de texte …

 string strDate = Request.Form["id_of_input_element"].ToString(); 

J'ai finalement utilisé le ci-dessus à um, "réinitialiser" le contrôle, après le retour, à sa valeur modifiée!

  1. Les <input> ne sauvegarderont pas leur état après le lancement. ASP.NET ne gère pas cela pour vous.

  2. Si vous mettez un code dans votre événement Page_Load pour définir les valeurs des zones de texte ASP.NET, les valeurs affichées ne seront pas sauvegardées, car Page_Load se produit après la restauration des états de contrôle enfant dans le cycle de vie de la page ASP.NET . Les valeurs sont déjà restaurées par ASP.NET, mais vous écrasez leurs valeurs restaurées.

  3. La bonne chose à faire pour réparer # 2 est de vérifier Page.IsPostBack avant de charger votre état initial, comme ceci:

     if ( !Page.IsPostBack ) { // set the textbox initial states from the database } 

METTRE À JOUR:

Il existe deux façons de résoudre le problème n ° 1. Une chose que vous pouvez faire est d'utiliser la collection Request.Form [] pour récupérer manuellement la valeur arrière publiée, comme ceci:

 string strDate = Request.Form["id_of_input_element"].ToString(); 

L'autre chose que vous pourriez faire, et c'est ce que je recommanderais si vous le pouvez, est de changer l'élément <input> dans une boîte de texte ASP.NET et de brancher tous les événements Javascript côté client à cela. Ensuite, ASP.NET va gérer complètement votre postback.

Je l'ai trouvé lors de la recherche d'une réponse au même type de problème et maintenant que j'ai trouvé mon problème, je pensais que cela pourrait aider quelqu'un d'autre à le classer ici.

Dans mon cas, j'avais une étiquette <form> dans la <form> de mes contrôles, donc, si vous ne résolvez pas votre problème ci-dessus, je souhaiterais rechercher un <form> perdu dans votre <form> .

J'espère que cela contribue à certains cas.

Si je comprends que vous demandez le droit, je pense que vous essayez de créer ces zones de texte en toute connaissance de cause. Dans l'affirmative, j'ai déjà eu ce problème avant de le résoudre en mettant les zones de texte en lecture seule en utilisant C # pas ASP.NET, j'ai simplement ajouté des lignes comme textboxName.Attributes.Add("readonly", "readonly"); Dans le Page_Load et ça a fonctionné très bien. Cette solution que j'ai trouvée ici sur Stackoverflow

Il semble que votre affichage soit désactivé. Activez la directive viewtate dans la page.

Au lieu de TextBoxPassword.Text=Password

utilisation

 TextBoxPassword.Attributes["value"]=Password