web-dev-qa-db-fra.com

les zones de texte perdent de la valeur sur postback

j'ai environ 4 zones de texte sur ma page Web ... certains sont asp: zones de texte tandis que d'autres sont de type entrée = "texte". 

la zone de texte d'entrée est renseignée par le biais d'un contrôle de calendrier popup javascript, tandis que la zone de texte asp.net est renseignée par saisie. Les valeurs initiales de ces zones de texte sont extraites d'une base de données. 

Lorsqu'un utilisateur modifie ces valeurs, elles ne sont pas enregistrées et les zones de texte sont effacées une fois que le bouton d'envoi a été cliqué. S'il vous plaît aider à résoudre cette confusion. Merci.

merci pour votre réponse mais cela 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 mettez également le code ci-dessous dans l'événement onclick du 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 zones de texte sont toujours vides et aucune d'entre elles n'est en lecture seule ..........

s'il vous plaît aider

19
bee

J'ai eu un problème similaire et cet article décrit mieux la solution à "Perte de données modifiées par javascript pendant la publication"Propriété ViewState et Readonly de 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 via JavaScript dans le côté client, elle ne sera pas propagée via la publication dans le côté serveur ... quoi que vous fassiez avec JavaScript, sauf si vous supprimez readonly = "true". Maintenant, il existe une solution à ce problème comme 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 de code ci-dessus. N'oubliez pas de supprimer Enable = "false" si vous le mettez.

26
visar_uruqi

Une autre chose que j'ai rencontrée ... Si vous utilisez un contrôle ASP.NET TextBox (par exemple), et qu'il est READONLY ou DISABLED, la publication ne capture pas la valeur modifiée.

Selon mon problème, je changeais la valeur du contrôle via javascript et même si le navigateur rendait la modification, à la publication, le contrôle conservait toujours la valeur d'origine.

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

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

J'ai finalement utilisé ce qui précède pour "réinitialiser" le contrôle, après la publication, sur sa valeur modifiée!

9
flaZer
  1. Les zones de texte <input> ne sauvegarderont pas leur état après publication. ASP.NET ne gère pas cela pour vous.

  2. Si vous insérez du code dans votre événement Page_Load pour définir les valeurs des zones de texte ASP.NET, les valeurs renvoyées ne seront pas enregistrées, car Page_Load survient après la restauration des états du contrôle enfant dans 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ésoudre le problème n ° 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 y a deux façons de résoudre le problème n ° 1. Une chose à faire est d'utiliser la collection Request.Form [] pour récupérer la valeur postée manuellement, comme ceci:

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

L'autre chose que vous pouvez faire, et c'est ce que je recommanderais si vous le pouvez, est de changer l'élément <input> en une zone de texte ASP.NET et de connecter tout événement Javascript côté client à cela. Ensuite, ASP.NET gérera complètement votre publication.

6
Charlie Kilian

j'ai trouvé cela en cherchant une réponse au même type de problème et maintenant que j'ai trouvé mon problème, j'ai pensé qu'il pourrait aider quelqu'un d'autre à le mettre ici.

dans mon cas, j'avais un tag <form> dans le <form> de mes commandes, donc, si vous ne résolvez pas votre problème avec la recherche ci-dessus, je recherche un <form> perdu dans votre <form>.

espérons que cela aide dans certains cas.

3
jo vision

Si je vous comprends bien, je pense que vous essayez de rendre ces zones de texte en lecture seule. Si tel était le cas, j’avais ce problème auparavant et je l’avais résolu en rendant les zones de texte lisibles à l’aide de C # et non d’ASP.NET, j’avais simplement ajouté des lignes telles que textboxName.Attributes.Add("readonly", "readonly"); dans le Page_Load et tout fonctionnait parfaitement. Cette solution que j'ai trouvée ici sur Stackoverflow

0
M009

au lieu de TextBoxPassword.Text=Password

utilisation

TextBoxPassword.Attributes["value"]=Password
0
user3500184