Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按钮单击/页面从JavaScript提交_C#_Javascript_Asp.net - Fatal编程技术网

C# 按钮单击/页面从JavaScript提交

C# 按钮单击/页面从JavaScript提交,c#,javascript,asp.net,C#,Javascript,Asp.net,我想了解asp.net框架如何知道按钮何时被单击,从而在收到请求后在服务器上触发其单击事件 我需要了解它是如何工作的,因为我想从javascript触发按钮的服务器点击事件 我能够从JavaScript执行页面提交: document.forms[0].submit(); 但是,如何才能做到这一点,使asp.net认为按钮单击已经发生,因此在服务器上,一旦收到请求,其单击事件就会触发 谢谢 更新1 谢谢大家的回复。如果我添加了一个asp.net按钮并查看了源代码,我会做一些测试,但似乎找不到

我想了解asp.net框架如何知道按钮何时被单击,从而在收到请求后在服务器上触发其单击事件

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

我能够从JavaScript执行页面提交:

 document.forms[0].submit();
但是,如何才能做到这一点,使asp.net认为按钮单击已经发生,因此在服务器上,一旦收到请求,其单击事件就会触发

谢谢

更新1

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

这是我试过的测试

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

从HTML按钮的click事件(button1)中,我向传入asp.net button2 id的javascript\uuu doPostback方法添加了一个客户端调用

因此,我试图通过调用html按钮(button1.)来触发服务器端button2 click事件


以及生成的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方法,并且通过从客户端调用它,它会在服务器上引发事件

那么提交和回发之间有什么区别呢?(我将为此启动一个新线程)。

谢谢你的帮助

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


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

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

document.getElementById("<%=Button1.ClientID%>").click();
document.getElementById(“”)。单击();
按钮1
是“服务器端”按钮的ID。

这可能有助于:

每当需要回发页面时,都会调用javascript
\uuu doPostBack
函数

要了解
\u doPostBack
,请阅读文章


编辑

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

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


参考:


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

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();
        }
    }
}
这来自
页面
类源代码.NET 4.0


如您所见,正如SLaks已经解释的,代码正在寻找ID等于作为隐藏表单字段传递的ID的控件,该字段名为
\uu EVENTTARGET
,然后调用处理程序
PostBackEventHandler
(如果存在)。

谢谢,我猜一旦客户端单击发生,页面将提交回服务器,但是,服务器如何知道它是由于该按钮的点击而提交的,因此,在服务器上它会启动服务器端的点击事件。@rauland-通过使用
click()
点击按钮,
onclick
代码被触发,SLaks很好地解释了这一点。这里有一个个人问题,很抱歉要问;我刚刚查看了你的个人资料,很好,但我看到了你的年龄,你才20岁。是真的吗?谢谢你的回答,我更新了我的问题,因为我看不到u doPostback方法。谢谢你的回答,我更新了我的问题,因为我看不到u doPostback javascript方法。@rauland:你在这里使用的浏览器是什么?
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();
        }
    }
}