如何调用__doPostBack方法? 调用方法在哪里?
我使用了控件,在浏览器中渲染后控件没有分配
click
事件属性。 究竟是如何调用服务器端事件的呢?
ASPX代码:
上面的控件在浏览器中呈现如下代码:
在浏览器中呈现以下代码,该代码设置__EVENTTARGET
。 我怀疑是如何调用__doPostBack
方法的? 调用方法在哪里?
function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } }
简单的答案: __doPostBack
JavaScript函数基于特定的
控件及其处理的事件进行调用。
详细答案:这取决于。
首先,让我们来举例说明。 你有一个
,它是一个标准的 。 ASP.NET WebForms中的所有内容都围绕标准的HTML
标记。 通过单击按钮,在不使用或协助JavaScript的情况下提交HTML
。
考虑到这一点,您可以很好地看到(您已经注意到)渲染的按钮没有分配
onclick
事件。 而且,正如您所看到的,单击按钮时会提交表单。
当谈到如何在单击按钮时执行后端(C#/ VB.NET / etc。)代码时:它全部由ASP.NET Framework本身处理,并且超出了这个问题/答案的范围。
其次,现在让我们来介绍__doPostBack
是什么,以及如何使用它。 __doPostBack
只是一个帮助JavaScript函数,用于提交HTML
。 由于上面列出的原因,您现在知道为什么按钮不需要调用
__doPostBack
函数。
为简单起见,让我们看一下具有
控件的ASP.NET页面,并SelectedIndexChanged
了SelectedIndexChanged
事件处理程序:
呈现如下:
让我们忽略onchange
事件中的setTimeout
函数 – 它只是ASP.NET使用的hacky变通方法 – 让我们专注于它内部的__doPostBack
函数。
正如您在此处所看到的, __doPostBack
函数正由onchange
事件处理程序调用。 关键的区别是更改
或控件的值不会导致浏览器提交表单!
ASP.NET Framework再次在内部处理提交表单时后端代码的执行方式(无论是否通过__doPostBack
函数)。
最后,至于__doPostBack
的细节:它接受两个参数 – eventTarget
和eventArgument
。 eventTarget
包含导致回发的控件的呈现HTML id
属性; 和eventArgument
是一个可选参数,可用于将其他数据传递给后端代码。
编辑附加信息: OP提出了一个非常有趣的问题 – 当有多个提交按钮时会发生什么?
好吧,在POST
操作期间,浏览器包含 ,这导致操作启动。
这意味着,就像获取元素的值一样,您也可以查询导致提交的按钮!
您的控件是一个提交按钮,它可以直接将表单提交给服务器而无需调用__dopostback方法。 所以在这种情况下__dopostback没有被调用。 __dopostback用于没有默认提交行为的控件,例如dropdownlist。
连接到服务器端事件是通过控件实现的ipostbackeventhandler接口实现的。 有关详细信息,请查看此http://msdn.microsoft.com/en-us/library/system.web.ui.ipostbackeventhandler.raisepostbackevent.aspx
那么,你怀疑的原因是因为你认为函数__doPostBack需要发布。 但另一方面,当html首次设计时,只有通过提交按钮发回服务器的方式。 这个function是在浏览器中自行构建的,这样当按下提交按钮时,浏览器将表单的数据传递给声明的位置。 但随着网络的发展,人们开始要求更多。 现在其他控件也需要回发到服务器。 为了实现它们,开发了各种hack,最着名的__doPostBack函数就是其中之一。 现在提交的任何其他控件都可以使用__doPostBack函数进行回发。 但是提交按钮就是这样做的。 就这样。