场景1(可行)
这是我创建的POC。
我有一个脚本管理器,一个html文本框,一个ASP.NET按钮,一个为上述按钮的Click事件设置了异步触发器的updatepanel。对于html文本框,我有onkeyup='__doPostBack('<%=ASPBUTTON.ClientID%>','')
。点击按钮的Click事件,并且异步更新updatepanel。
场景2(它无效) 与我的实际代码库的唯一区别是我有一个JQUERY FILAMENTGROUP datetimepicker,其onchange事件被使用而不是html文本框的onchange。此外,这里我的页面使用母版页。现在,我的问题是当datetimepicker的onchange事件触发时,请求进入服务器端,但是BUTTON click事件没有被触发。
更多细节, 我想在datetimepicker选择中自动更新updatepanel。所以,按钮实际上是通过css隐藏的(display:none)。
按钮ID - btnDateRangeCallback
Datetimepicker文本框(非ASP控件) - dateRange
onChange: function() {__doPostBack('<%=btnDateRangeCallback.ClientID%>', $('#dateRange').val());}
[请记住我说它适用于我的简单POC,而在我的实际代码库中我使用的是母版页继承,因此所有这些控件都放在contentplaceholder中。此外,回发正在发生,如果我在Page_Load中断,我可以看到_EVENTTARGET和_EVENTARGUMENT正确发送
请帮忙。
更简单地说, 回发后,当我在Page_Load中断时,我看到Request.Form内容为, ctl00%24ContentPlaceHolder1%24SMgr1 = ctl00%24ContentPlaceHolder1%24SMgr1%7cctl00_ContentPlaceHolder1_btnDateRangeCallback &安培; __ EVENTTARGET = ctl00_ContentPlaceHolder1_btnDateRangeCallback &安培; _ EVENTARGUMENT = 5%2F3%2f2011 + - + 6%2F2%2f2011 &安培; _VIEWSTATE =%2fwEPDwULLTE3NDY5NDIwMDRkZIuTqMNNsFHlRYhjpKaUCaCXj42h &安培; _ EVENTVALIDATION =%2fwEWAgLBx52kBALP6Ln6DdkkwE%2frVIKQzKE1L0k4QhIc768w &安培; _ASYNCPOST =真安培;
为什么btnDateRangeCallback的Click事件没有点击???
答案 0 :(得分:5)
改为使用UniqueID:__doPostBack('<%=btnDateRangeCallback.UniqueID %>', ...
答案 1 :(得分:1)
将您的代码更改为此:
setTimeout(function () { __doPostBack('btnSave', '') }, 500);
使用“ btnSave ID”。它将在所有浏览器中运行。
答案 2 :(得分:0)
为什么不单击按钮?
onchange="$('#<%= ASPBUTTON.ClientID %>').click()"
(理想情况下,不要使用内联事件处理程序......)
如果这对您没有好处,您可以使用__EVENTTARGET
和__EVENTARGUMENT
解决问题(请参阅this article获取指南)。
答案 3 :(得分:0)
它不工作的原因是因为它位于内容占位符中。
__doPostBack
的第一个参数用于服务器端,客户端可以是任何东西。因此 __doPostBack
被调用并根据需要提交,但在服务器上,第一个参数的值用于查找将处理事件的控件。它用于查找具有匹配 UniqueId 的控件。
当不在 NamingContainer 中时,UniqueID 和 ClientID 相同,在 NamingContainer 中,ClientId 使用下划线 (_) 构建,UniqueId 使用美元符号 ($) 构建。
由于在这种情况下服务器收到的值不允许它找到控件,它不知道要触发什么事件,因此不会触发任何事件,尽管注册为回发和 似乎有一个“__EVENTTARGET”可以让它找到控件。
ClientId 在不在 MasterPage 上时有时会起作用,特别是只要控件不在 NamingContainer
内,它就会起作用。它永远不会在母版页内工作的原因是母版页总是有一个命名容器。