Por que o ASP.NET está enviando o valor original de um controle TextBox quando o conteúdo foi alterado?

Eu tenho um formulário da web que permite ao usuário modificar dados em determinados campos (principalmente controles TextBox, com um par de CheckBox, DropDownList e um controle RadioButtonList) com um botão de envio para salvar as alterações. Coisas bastante padrão. O problema é que preciso controlar quais campos eles modificaram. Portanto, estou usando controles HiddenField do ASP.NET para armazenar o valor original e, em seguida, enviar comparando com o valor do controle TextBox (por exemplo) correspondente para determinar quais campos foram modificados.

No entanto, quando eu submeto o formulário e faço a comparação, o valor do controle TextBox no código atrás ainda reflete o valor original, mesmo que eu tenha alterado o conteúdo do TextBox, portanto, não está registrando a alteração. Aqui está um exemplo de um conjunto de pares TextBox / HiddenField (neste caso, último, primeiro, nomes do meio) no meu formulário ASP.NET:

<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>

Estou definindo os valores originais de todos esses controles (".Text" para os controles TextBox, ".Value" para os controles HiddenField) no PageLoad no código por trás.

Aqui está um exemplo de onde eu estou fazendo a comparação quando eu enviar o formulário (estou adicionando o nome do campo, valor antigo e novo valor para objetos List <string> se os valores forem diferentes):

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

Mas quando eu inserir um novo valor no controle TextBox e clique em Enviar:

em seguida, percorrer o código no depurador, ele me mostra que o valor do controle ainda é o valor antigo:

Por que a comparação está ocorrendo em relação ao valor original do TextBox, embora o novo valor esteja lá quando clico no botão enviar?

Update: @David recebe o crédito por isso, mesmo que ele não tenha postado como uma resposta - eu estava esquecendo de incluir o método de preenchimento prévio dos valores originais dos controles em uma verificação de IsPostBack; Eu realmente deveria ter conhecido melhor, eu tenho feito isso por um bom tempo!

questionAnswers(4)

yourAnswerToTheQuestion