单击不相关的按钮时,PostBack OnTextChanged将触发
PostBack OnTextChanged is triggering when unrelated button is clicked
在我的页面上,我有:
txtCalendar
,用于输入日期的asp:TextBox
,附带JQuerydatepicker
btnSave
,一个用于保存表单的asp:Button
btnAdd
,一个为页面的不同部分打开新表单的asp:LinkButton
单击任一按钮后,在调用btnSave_Click
或btnAdd_Click
函数之前,会调用txtCalendar_TextChanged
。单击这些按钮时根本不应该调用txtCalendar_TextChanged
——在之前或之后。
JQuery datepicker
可能以某种方式导致了这种情况——当我注释掉实例化datepicker
的代码并将其绑定到文本框时,txtCalendar_TextChanged
被调用,而不是。
此外,我已经验证:
- 即使我阻止
$(function() {}
脚本在回发后运行,单击按钮时仍会调用txtCalendar_TextChanged
方法 - 我没有任何JavaScript来查找ID
#btnSave
或#btnAdd
或任何可以匹配/响应这些ID的东西 txtCalendar_TextChanged
的sender
是我的txtCalendar
文本框txtCalendar_TextChanged
的eventargs
为空(不确定这是否重要)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_Load
在txtCalendar_TextChanged
之前被命中,但第一个检查是If(Page.IsPostBack) Then Exit Sub
——Page_Load
的其余部分没有运行(所以——其他后端函数没有被命中)
已解决:
在vb.net中,我使用myDate.ToShortDateString
来设置txtCalendar
中的初始值。ToShortDateString
格式的日期没有前导零,而datepicker
的默认格式有前导零
实例化datepicker
时,它会更改txtCalendar
中的日期格式,但由于这是通过代码完成的,因此不会触发回发。当用户单击按钮并触发回发时,由于新的日期格式(文本字符串已更改),txtCalendar_TextChanged
也会被触发。
将datepicker
的dateFormat
更改为m/d/yy
解决了问题。