我有一个 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<string> 对象):
if (tbxLName.Text != hdnLName.Value)
{
changes.Add("ConsumerLastName");
oldVal.Add(hdnLName.Value);
newVal.Add(tbxLName.Text);
}
但是当我在 TextBox 控件中输入一个新值并单击提交时:
然后单步调试调试器中的代码,它显示控件的值仍然是旧值:
为什么当我单击提交按钮时,即使新值存在,也会与 TextBox 的原始值进行比较?
更新:@David 对此表示赞赏,尽管他没有将其作为答案发布——我忘记在检查 IsPostBack 时附上用于预填充控件原始值的方法;我真的应该知道更好,我已经这样做了很长一段时间了!