gpt4 book ai didi

c# - 为什么 ASP.NET 在内容已更改时提交 TextBox 控件的原始值?

转载 作者:太空狗 更新时间:2023-10-29 19:55:58 33 4
gpt4 key购买 nike

我有一个 Web 表单,允许用户修改某些字段(主要是 TextBox 控件,有几个 CheckBox、DropDownList 和一个 RadioButtonList 控件)中的数据,并带有一个提交按钮以保存更改。很标准的东西。问题是,我需要跟踪他们修改了哪些字段。所以我使用 ASP.NET HiddenField 控件来存储原始值,然后在提交时将其与相应的 TextBox(例如)控件的值进行比较以确定哪些字段已被修改。

但是,当我提交表单并进行比较时,即使我更改了TextBox的内容,后面代码中TextBox控件的值仍然反射(reflect)了原始值,因此它没有注册更改.下面是我的 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 控件中输入一个新值并单击提交时:

new value enteredin TextBox

然后在调试器中逐步执行代码,它告诉我控件的值仍然是旧值:

old value of TextBox in debugger

为什么当我单击提交按钮时新值已经存在,但还是与 TextBox 的原始值进行比较?

更新:@David 得到了这个荣誉,尽管他没有将其作为答案发布——我忘记在 IsPostBack 的检查中包含预填充控件原始值的方法;我真的早该知道,我已经这样做了很长一段时间了!

最佳答案

您是否正在检查 Page_Load 中的 IsPostback,以免覆盖回传中发送的值?

关于c# - 为什么 ASP.NET 在内容已更改时提交 TextBox 控件的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17301366/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com