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