单击不相关的按钮时,PostBack OnTextChanged将触发

PostBack OnTextChanged is triggering when unrelated button is clicked

本文关键字:OnTextChanged PostBack 不相关 按钮 单击      更新时间:2023-11-01

在我的页面上,我有:

  • txtCalendar,用于输入日期的asp:TextBox,附带JQuery datepicker
  • btnSave,一个用于保存表单的asp:Button
  • btnAdd,一个为页面的不同部分打开新表单的asp:LinkButton

单击任一按钮后,在调用btnSave_ClickbtnAdd_Click函数之前,会调用txtCalendar_TextChanged。单击这些按钮时根本不应该调用txtCalendar_TextChanged——在之前或之后。

JQuery datepicker可能以某种方式导致了这种情况——当我注释掉实例化datepicker的代码并将其绑定到文本框时,txtCalendar_TextChanged调用,而不是

此外,我已经验证:

  • 即使我阻止$(function() {}脚本在回发后运行,单击按钮时仍会调用txtCalendar_TextChanged方法
  • 我没有任何JavaScript来查找ID #btnSave#btnAdd或任何可以匹配/响应这些ID的东西
  • txtCalendar_TextChangedsender是我的txtCalendar文本框
  • txtCalendar_TextChangedeventargs为空(不确定这是否重要)
  • txtCalendar中的文本实际上没有更改(在UI中进行可视化验证,而不是通过在后端添加代码进行检查)
  • 当我删除OnTextChanged='txtCalendar_TextChanged'时,txtCalendar_TextChanged而不是调用的(所以它txtCalendar调用的,不知怎么的…)
  • 即使删除AutoPostBack='true',也会调用txtCalendar_TextChanged
  • 即使我通过注释掉Handles btnSave.Click来禁用btnSave_Click函数,也会调用txtCalendar_TextChanged(这两个按钮在aspx.vb中都使用Handles btnX.Click,而不是在aspx中使用OnClick="btnX_Click"
  • Page_LoadtxtCalendar_TextChanged之前被命中,但第一个检查是If(Page.IsPostBack) Then Exit Sub——Page_Load的其余部分没有运行(所以——其他后端函数没有被命中)

已解决:

在vb.net中,我使用myDate.ToShortDateString来设置txtCalendar中的初始值。ToShortDateString格式的日期没有前导零,而datepicker的默认格式有前导零

实例化datepicker时,它会更改txtCalendar中的日期格式,但由于这是通过代码完成的,因此不会触发回发。当用户单击按钮并触发回发时,由于新的日期格式(文本字符串已更改),txtCalendar_TextChanged也会被触发。

datepickerdateFormat更改为m/d/yy解决了问题。