c# - Warum sendet ASP.NET den ursprünglichen Wert eines TextBox-Steuerelements, wenn der Inhalt geändert wurde?

Translate

Ich habe ein Webformular, mit dem der Benutzer Daten in bestimmten Feldern (hauptsächlich TextBox-Steuerelemente mit einigen CheckBox-, DropDownList- und einem RadioButtonList-Steuerelement) mit einer Senden-Schaltfläche ändern kann, um die Änderungen zu speichern. Ziemlich normales Zeug. Der Haken ist, ich muss verfolgen, welche Felder sie geändert haben. Ich verwende also ASP.NET HiddenField-Steuerelemente, um den ursprünglichen Wert zu speichern, und vergleiche ihn dann beim Senden mit dem Wert des entsprechenden TextBox-Steuerelements (zum Beispiel), um festzustellen, welche Felder geändert wurden.

Wenn ich jedoch das Formular abschicke und den Vergleich durchführe, spiegelt der Wert des TextBox-Steuerelements im Code dahinter immer noch den ursprünglichen Wert wider, obwohl ich den Inhalt der TextBox geändert habe, sodass die Änderung nicht registriert wird. Hier ist ein Beispiel für eine Reihe von TextBox / HiddenField-Paarungen (in diesem Fall letzte, erste, zweite Vornamen) in meinem ASP.NET-Formular:

<div id="editName" class="editField" style="display: none">
    <asp:TextBox ID="tbxLName" runat="server" class="editable"></asp:TextBox>,
    <asp:TextBox ID="tbxFName" runat="server" class="editable"></asp:TextBox>
    <asp:TextBox ID="tbxMName" runat="server" class="editable"></asp:TextBox>
    <asp:HiddenField ID="hdnLName" runat="server" />
    <asp:HiddenField ID="hdnFName" runat="server" />
    <asp:HiddenField ID="hdnMName" runat="server" />
</div>

Ich setze die ursprünglichen Werte aller dieser Steuerelemente (".Text" für die TextBox-Steuerelemente, ".Value" für die HiddenField-Steuerelemente) auf PageLoad im Code dahinter.

Hier ist ein Beispiel dafür, wo ich den Vergleich durchführe, wenn ich das Formular sende (ich füge den Feldnamen, den alten Wert und den neuen Wert zu List <string> -Objekten hinzu, wenn sich die Werte unterscheiden):

if (tbxLName.Text != hdnLName.Value)
{
    changes.Add("ConsumerLastName");
    oldVal.Add(hdnLName.Value);
    newVal.Add(tbxLName.Text);
}

Wenn ich jedoch einen neuen Wert in das TextBox-Steuerelement eingebe und auf Senden klicke:

new value enteredin TextBox

Wenn Sie dann den Code im Debugger durchgehen, wird mir angezeigt, dass der Wert des Steuerelements immer noch der alte Wert ist:

old value of TextBox in debugger

Warum wird der Vergleich mit dem ursprünglichen Wert der TextBox durchgeführt, obwohl der neue Wert vorhanden ist, wenn ich auf die Schaltfläche "Senden" klicke?

Update: @David erhält die Gutschrift dafür, obwohl er sie nicht als Antwort gepostet hat. Ich habe vergessen, die Methode zum Vorabfüllen der ursprünglichen Werte der Steuerelemente in eine Prüfung für IsPostBack aufzunehmen. Ich hätte es wirklich besser wissen sollen, ich mache das schon eine ganze Weile!

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Suchen Sie in Page Load nach IsPostback, damit Sie die im Postback gesendeten Werte nicht überschreiben?

Quelle
Translate

Stellen Sie sicher, dass Sie Ihre Werte in der nicht überschreibenPage_LoadMethode:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        someTextField = "Some Value";
    }
}

Es hat eine Weile gedauert, bis ich das bekommen habePage_LoadDie Methode funktioniert als "bevor etwas geht" -Methode und nicht nur als Methode, die ausgeführt wird, wenn Sie die Seite mit besuchenGET.

Quelle
Translate

Stellen Sie sicher, dass Sie den Wert für das Textfeld nicht irgendwo in page init überschreiben oder laden, ohne nach dem IsPostback-Flag zu suchen.

Quelle
Translate

Es kann durch Postback passieren. Wenn Sie für das festgelegte Textfeld nicht in codieren!isPostBackdann setzen Sie es.

dh

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        tbxLName.Text="anything";
    }
}
Quelle
Leave a Reply
You must be logged in to post a answer.
Über den Autor