[英]Why is ASP.NET submitting the original value of a TextBox control when the contents have been changed?
我有一个Web表单,允许用户使用提交按钮修改某些字段中的数据(主要是TextBox控件,带有几个CheckBox,DropDownList和一个RadioButtonList控件)以保存更改。 很标准的东西。 问题是,我需要跟踪他们修改的字段。 所以我使用ASP.NET HiddenField控件来存储原始值,然后在提交时将其与相应的TextBox(例如)控件的值进行比较,以确定哪些字段已被修改。
但是,当我提交表单并进行比较时,后面代码中TextBox控件的值仍然反映原始值,即使我已经更改了TextBox的内容,因此它没有注册更改。 以下是我的ASP.NET表单中的一组TextBox / HiddenField配对(在本例中为last,first,middle name)的示例:
<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控件中输入一个新值并单击Submit时:
然后逐步调试调试器中的代码,它告诉我控件的值仍然是旧值:
为什么比较发生在TextBox的原始值上,即使单击提交按钮时存在新值?
更新:@David获得了这个功劳,即使他没有将其作为答案发布 - 我忘记在IsPostBack的支票中附上预先填充控件原始值的方法; 我真的应该知道的更好,我已经做了很长一段时间了!
您是否在Page_Load中检查IsPostback,以便不覆盖在回发中发送的值?
确保您没有覆盖Page_Load
方法中的值:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
someTextField = "Some Value";
}
}
我需要一段时间才能得到Page_Load
方法作为“ Page_Load
之前”方法,而不仅仅是当您使用GET
访问页面时正在运行的方法。
确保您没有在页面init或加载的某处覆盖文本框的值而不检查IsPostback标志。
它可能由于回发而发生。 如果您编写的set textbox不在!isPostBack
那么就把它放进!isPostBack
。
即
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
tbxLName.Text="anything";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.