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

时间:2011-05-01 13:56:29

标签: c# javascript asp.net

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

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

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

 document.forms[0].submit();

但是如何做同样的事情以便asp.net认为发生了按钮点击,因此在服务器上,一旦收到请求就会触发其click事件。

由于

更新1

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

这是我试过的测试。

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

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

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

<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
        <input id="Button1" type="button" 
         value="Raise Button2 server side click event"
         onclick="javascript:__doPostBack('Button2', '')" /> 

        <asp:Button ID="Button2" runat="server" 
        Text="asp.net_Button2" 
        OnClick="button2Click" />  
    </div>  
    </form>  
</body>  
</html> 

生成的HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
</title>
</head>
<body>
    <form name="form1" method="post" action="Default6.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 
value="/wEPDwUKMjA0OTM4MTAwNGRke29WUkB+FLhQArxd1ehT98cWw1Y=" />
</div>

<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" 
value="/wEWAgKLs+3sDgK7q7GGCBs2MBvLk9CJNnA02t08R1LKdiJU" />
</div>
    <div>
        <input id="Button1" type="button" value="Raise Button2 server side click event" 
onclick="javascript:__doPostBack('Button2', '')" />
        <input type="submit" name="Button2" value="asp.net_Button2" id="Button2" />
    </div>
    </form>
</body>
</html>  

更新2

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

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

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

要了解__doPostBack,请阅读this文章。


修改

使用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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

这可能会有所帮助: Call ASP.NET function from JavaScript?

答案 4 :(得分:1)

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

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类源代码.NET 4.0

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