__dopostback未按预期工作

时间:2011-06-02 10:54:37

标签: jquery asp.net visual-studio updatepanel

场景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事件没有点击???

4 个答案:

答案 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 内,它就会起作用。它永远不会在母版页内工作的原因是母版页总是有一个命名容器。