从JavaScript提交按钮点击/页面提交

我想了解asp.net框架如何知道何时单击按钮,因此一旦收到请求就会在服务器上触发其click事件。

我需要了解它是如何工作的,因为我想从javascript触发按钮的服务器点击事件。

我可以从JavaScript执行页面提交:

document.forms[0].submit(); 

但是如何做到这一点,以便asp.net认为按钮点击已经发生,所以在服务器上,一旦收到请求,它的点击事件就会触发。

谢谢

更新1

谢谢大家的回复。 如果我添加一个asp.net按钮并查看源代码,做一些测试,我似乎无法找到生成的JavaScript“__doPostBack”函数。

这是我试过的测试。

我有一个普通的HTML按钮(button1)和一个asp.net按钮。(button2)

从HTML按钮的单击事件(button1),我添加了一个客户端调用javascript __doPostback方法传入asp.net button2 id。

所以我试图通过调用html按钮(button1)来触发服务器端button2单击事件。

      

并生成的HTML:

       

更新2

如果我将按钮“UseSubmitBehavior”设置为false,那么它确实生成了__doPostBack方法,并通过从客户端调用它确实引发了服务器上的事件。

那么提交和回发之间的区别是什么? (我将为此开始一个新线程)。
谢谢您的帮助!

只要需要回发页面,就会调用javascript __doPostBack函数。

要了解__doPostBack ,请阅读本文。


编辑

使用UseSubmitBehavior属性指定Button控件是使用客户端浏览器的提交机制还是ASP.NET回发机制 。 默认情况下,此属性的值为true ,导致Button控件使用浏览器的提交机制 。 如果指定false ,则ASP.NET页面框架将客户端脚本添加到页面以将表单发布到服务器。

UseSubmitBehavior属性为false时 ,控件开发人员可以使用GetPostBackEventReference方法返回Button的客户端回发事件。 GetPostBackEventReference方法返回的字符串包含客户端函数调用的文本,可以插入到客户端事件处理程序中。


参考:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.usesubmitbehavior.aspx

http://www.w3schools.com/ASPNET/prop_webcontrol_button_usesubmitbehavior.asp

您可以使用客户端代码完美模仿按钮单击:

 document.getElementById("<%=Button1.ClientID%>").click(); 

Button1是“服务器端”按钮的ID。

ASP.Net向按钮添加了一个客户端onclick处理程序,该按钮以按钮名称作为参数调用客户端__doPostback方法。
此方法将按钮名称插入隐藏字段并提交表单。
(您可以在页面源中看到所有这些)

在服务器上,ASP.Net从隐藏字段中查找控件和事件名称,并引发相应的服务器端名称。

这可能会有所帮助: 从JavaScript调用ASP.NET函数?

以下是负责执行正确的服务器端方法的代码:

 private void RaisePostBackEvent(NameValueCollection postData) { if (this._registeredControlThatRequireRaiseEvent != null) { this.RaisePostBackEvent(this._registeredControlThatRequireRaiseEvent, null); } else { string str = postData["__EVENTTARGET"]; bool flag = !string.IsNullOrEmpty(str); if (flag || (this.AutoPostBackControl != null)) { Control control = null; if (flag) { control = this.FindControl(str); } if ((control != null) && (control.PostBackEventHandler != null)) { string eventArgument = postData["__EVENTARGUMENT"]; this.RaisePostBackEvent(control.PostBackEventHandler, eventArgument); } } else { this.Validate(); } } } 

这取自Page class源代码.NET 4.0

正如您所看到的那样,SLaks已经解释过,代码正在寻找ID等于作为隐藏表单字段传递的ID的__EVENTTARGET ,然后调用处理程序PostBackEventHandler如果存在)。