我有一个 Web 表单,允许用户修改某些字段中的数据(主要是 TextBox 控件,还有几个 CheckBox、DropDownList 和一个 RadioButtonList 控件),并使用提交按钮保存更改。相当标准的东西。问题是,我需要跟踪他们修改了哪些字段。因此,我使用 ASP.NET HiddenField 控件来存储原始值,然后在提交时将其与相应 TextBox(例如)控件的值进行比较,以确定哪些字段已被修改。
但是,当我提交表单并进行比较时,后面代码中的 TextBox 控件的值仍然反映原始值,即使我更改了 TextBox 的内容,因此它没有注册更改。下面是我的 ASP.NET 表单中的一组 TextBox/HiddenField 配对(在本例中是姓氏、名字、中间名)的示例:
<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>
我在后面的代码中的 PageLoad 上设置所有这些控件的原始值(对于 TextBox 控件为“.Text”,对于 HiddenField 控件为“.Value”)。
下面是我在提交表单时进行比较的示例(如果值不同,我会将字段名称、旧值和新值添加到 List 对象中):
if (tbxLName.Text != hdnLName.Value)
{
changes.Add("ConsumerLastName");
oldVal.Add(hdnLName.Value);
newVal.Add(tbxLName.Text);
}
但是当我在 TextBox 控件中输入新值并单击“提交”时:
然后单步执行调试器中的代码,它显示控件的值仍然是旧值:
即使当我单击提交按钮时新值已经存在,为什么仍会与 TextBox 的原始值进行比较?
更新: @David 得到了这一点,尽管他没有将其作为答案发布 - 我忘记在 IsPostBack 检查中附上用于预填充控件原始值的方法;我真的应该更清楚,我已经这样做很长一段时间了!