it-swarm.com.de

textfelder verlieren an Postback an Wert

ich habe ungefähr 4 Textfelder auf meiner Webseite ... einige sind asp: Textfelder, während andere Eingabetyp = "Text" sind. 

das Eingabetextfeld wird über ein JavaScript-Popup-Steuerelement aufgefüllt, während das Asp.net-Textfeld durch Eingabe ausgefüllt wird. Die Anfangswerte dieser Textfelder werden aus einer Datenbank abgerufen. 

Wenn ein Benutzer diese Werte ändert, werden sie nicht gespeichert und die Textfelder werden gelöscht, nachdem auf die Schaltfläche "Senden" geklickt wurde. Bitte helfen Sie, diese Verwirrung zu lösen. Vielen Dank.

danke für deine antwort aber es funktioniert immer noch nicht .....

ich habe diesen Code in mein Seitenladeereignis eingefügt

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();

}

und fügen Sie auch den folgenden Code in das Onclick-Ereignis für die Schaltfläche ein

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);
            }

die Textfelder werden immer noch gelöscht und nichts davon ist readonly ..........

bitte helfen

19
bee

Ich hatte ein ähnliches Problem und die Lösung für "Verlust von Daten, die während des Postbacks durch Javascript geändert wurden" Wird am besten in diesem Artikel beschrieben ViewState und Readonly-Eigenschaft von Textbox

nehmen wir zum Beispiel an, wir haben diese asp.net-Kontrolle:

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

wenn Sie den Wert dieses Steuerelements durch Javascript auf der Clientseite ändern, wird es nicht über Postback auf der Serverseite weitergegeben. Was auch immer Sie mit Javascript tun, es sei denn, Sie entfernen readonly = "true". Jetzt gibt es eine Lösung für dieses Problem, wie im Artikel oben beschrieben.

Fügen Sie dies einfach in das PageLoad-Ereignis ein

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

und du bist fertig. Vergessen Sie nicht, ReadOnly = "true" oder Enable = "false" zu entfernen, wenn Sie beabsichtigen, die Bearbeitung des Steuerelements zu deaktivieren. Verwenden Sie einfach den obigen Ausschnitt. Vergessen Sie nicht, Enable = "false" zu entfernen, wenn Sie es anlegen.

26
visar_uruqi

Eine andere Sache, auf die ich gestoßen bin ... Wenn Sie ein ASP.NET-TextBox-Steuerelement verwenden (beispielsweise READONLY oder DISABLED), wird das Postback den geänderten Wert nicht abfangen.

Bei meinem Problem habe ich den Wert des Steuerelements durch Javascript geändert. Obwohl der Browser die Änderung vorgenommen hat, hat das Steuerelement beim Postback den ursprünglichen Wert beibehalten.

Scheint auch ein häufiges Problem ... Javascript startet ein benutzerdefiniertes ASCX-Kalendersteuerelement, und das Ergebnis wird von Javascript in das Textfeld eingefügt. Benutzern sollte es nicht gestattet sein, den Textfeldwert direkt zu ändern ... 

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

Letztendlich habe ich das oben genannte verwendet, um das Steuerelement nach dem Postback auf den geänderten Wert zurückzusetzen.

9
flaZer
  1. Die <input>-Textfelder werden ihren Status nach dem Postback nicht speichern. ASP.NET behandelt das nicht für Sie.

  2. Wenn Sie Code in Ihr Ereignis PageLoad eingeben, um die Werte der ASP.NET-Textfelder festzulegen, werden die zurückgeschickten Werte nicht gespeichert, da PageLoad auftritt, nachdem die untergeordneten Steuerungszustände im ASP.NET-Seitenlebenszyklus) wiederhergestellt wurden . Die Werte werden bereits von ASP.NET wiederhergestellt, Sie überschreiben jedoch ihre wiederhergestellten Werte.

  3. Um Fehler Nr. 2 zu beheben, müssen Sie Page.IsPostBack vor dem Laden Ihres Ausgangsstatus wie folgt überprüfen:

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

AKTUALISIEREN:

Es gibt zwei Möglichkeiten, um Problem Nr. 1 zu lösen. Sie können die Request.Form [] - Auflistung verwenden, um den zurückgeschickten Wert manuell wie folgt abzurufen:

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

Die andere Sache, die Sie tun könnten, und dies würde ich empfehlen, wenn Sie können, ist, das <input> -Element in ein ASP.NET-Textfeld zu ändern und alle clientseitigen Javascript-Ereignisse damit zu verknüpfen. Dann wird ASP.NET Ihr Postback vollständig abwickeln.

6
Charlie Kilian

ich habe dies gefunden, als ich nach einer Antwort auf die gleiche Art von Problem gesucht habe. Jetzt, wo ich mein Problem gefunden habe, dachte ich, es könnte jemand anderem helfen, es hier zu platzieren.

in meinem Fall hatte ich ein Tag <form> im <form> meiner Steuerelemente. Wenn Sie also Ihr Problem nicht mit dem obigen Problem gelöst haben, habe ich die Suche nach einem <form> innerhalb Ihres <form> verloren.

ich hoffe es hilft in einigen Fällen.

3
jo vision

Wenn Sie sich recht fragen, versuchen Sie, diese Textfelder schreibgeschützt zu machen. Wenn ja, hatte ich dieses Problem zuvor und löste es, indem ich die Textfelder mit C # und nicht mit ASP.NET schreibgeschützt machte. Ich fügte nur Zeilen wie textboxName.Attributes.Add("readonly", "readonly"); in der PageLoad hinzu und es funktionierte einwandfrei. Diese Lösung fand ich hier auf Stackoverflow

0
M009

anstelle von TextBoxPassword.Text=Password

benutzen

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