上个月有个面试题,还没太弄明白,上来问问. 题是这样出的:我们为一个Button控件写Click事件,有时为什么要点击两次才执行事件中的代码? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没明白怎么回事。。给你顶一下吧。。不过想实现点击两次在触发事件很easy,加个javascript的脚本就行了。但是问题好像不是这个意思,奇怪的问题 Button.Attributes.Add("onclick","需要执行的javascript语句")把这个page_load里 这种题考的是什么呀?在正确的程序里,是一次点击就执行了。如果按这样的题意,两种情况:1. 程序写错了。2. 程序故意写成点击两次才执行事件。如:*****************************************************************************<%@ Page language="c#" AutoEventWireup="false" debug="true"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <title>WebForm</title> <meta name="CODE_LANGUAGE" Content="C#"> <meta name=vs_defaultClientScript content="JavaScript"> <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><script runat="server" language="c#">private void Page_Load(object sender, System.EventArgs e){ if( IsPostBack ) { if( ViewState["Num"] == null ) ViewState["Num"] = 0; else ViewState["Num"] = (int)ViewState["Num"] + 1; if((int)ViewState["Num"] > 0) this.Button1.Click += new System.EventHandler(this.Button1_Click); }}override protected void OnInit(EventArgs e){ InitializeComponent(); base.OnInit(e);}private void InitializeComponent(){ this.Load += new System.EventHandler(this.Page_Load); }private void Button1_Click(object sender, System.EventArgs e){ Response.Write("点击了两次!");}</script> </head> <body> <form id="Form1" method="post" runat="server"> <asp:TextBox id="TextBox1" runat="server"/><asp:Button id="Button1" runat="server" Text="Button"/> </form> </body></html> 注意是:要点击两次才执行“事件中的代码”?只要是 Button 事件中的,都应该算是“事件中的代码”。 因为click事件发生在page—load之后,事件是执行了,但页面上显示不出来。 我们为一个Button控件写Click事件,有时为什么要点击两次才执行事件中的代码?曾经碰到过。不过忘记了当初是怎么解决的了。好像是因为page_load事件中忘记加postback的判定了 原因有很多了:1.第一次点击的时候没有真正的访问网页,只是用的客户端的缓存,或者是服务器的缓存。 第二次点击的时候才真正的访问了网页,执行了代码。2.asp.net的问题,设置断点跟踪一下,然后就可以了。3.代码问题。比如在删除DataGrid里的一行数据的时候,删除之后是要重新绑定一下DataGrid的。 而在删除的代码里并没有重新绑定,而在第二次单击的时候,DataGrid才得到了重新的绑定,看起来好像是第二次点击的时候才执行。4.其他未知问题。这个不算什么了,你有没有见过,奇数次点击无效,偶数次点击才有效的情况吗?我就遇到了。DataGrid的选择列产生的时事件,第一次点击:页面闪一下,没有执行代码。第二次点击:页面闪一下,执行代码了。第三次点击:页面闪一下,又不执行代码了。第四次点击:页面闪一下,又执行代码了。第五次点击:页面闪一下,又不执行代码了。第六次点击:页面闪一下,又执行代码了。......设置断点跟踪也是一样的情况。请其他人测试,情况依旧。但是其他页面里的相同的事件,却没有问题。 是不是当第一次点击按钮的时候发生了页面上的回传事件,也就是如TextChanged事件等,如果这样,就算第一次点击按钮也不会触发事件的.因为会先执行TextChanged事件…….当点击第二次是才执行button事件 因为没有if(!Page.IsPostBack){} 我遇到过,,,,解决方法是加了个Page.IsPostBack 因为计划生育、所以1+1=3;不然1+1=n; :)同意增加IsPostBack;处理数据后重新绑定数据。 protected System.Web.UI.WebControls.Button btn; PageLoad事件中这样写会出现两次点击的情况if ( !IsPostBack ) { }else{ btn.Click +=new EventHandler(btn_Click);} 回复人: zhoumins(zm) ( ) 信誉:100 2005-09-02 16:45:00 得分: 0 因为click事件发生在page—load之后,事件是执行了,但页面上显示不出来。我觉得这个人说的对,我碰到过同样的情况。还有,比如把usercontrol修改property后的显示放在usercontrol的pageload中的话,也会出现类似的情况。 asp.net配置工具出了点问题 vs哪个版本可以开发ASP.NET MVC? 送分,win2003服务器运行asp.net2.0程序,要装什么,要注意什么? 能不能在gridview控件里嵌入一个repeater控件? 请教各位大虾,关于Ajax 由传奇私服Web挂机产生的想法! chinaren验证码图片的 程序实现自动下载问题,大家快来帮忙或学习呀! 新手求教~~有关调用模态窗口的问题 讨论: asp.net特点以及因此而来的利弊 怎么将GridView里的数据传到新的窗口中 如何使浏览器上的后退按钮无效 如何把dataset 的内容更新到数据库中?
把这个page_load里
在正确的程序里,是一次点击就执行了。如果按这样的题意,两种情况:
1. 程序写错了。
2. 程序故意写成点击两次才执行事件。
如:
*****************************************************************************
<%@ Page language="c#" AutoEventWireup="false" debug="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html>
<head>
<title>WebForm</title>
<meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script runat="server" language="c#">
private void Page_Load(object sender, System.EventArgs e)
{
if( IsPostBack )
{
if( ViewState["Num"] == null )
ViewState["Num"] = 0;
else
ViewState["Num"] = (int)ViewState["Num"] + 1;
if((int)ViewState["Num"] > 0)
this.Button1.Click += new System.EventHandler(this.Button1_Click);
}
}override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write("点击了两次!");
}
</script>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:TextBox id="TextBox1" runat="server"/><asp:Button id="Button1" runat="server" Text="Button"/>
</form>
</body>
</html>
第二次点击的时候才真正的访问了网页,执行了代码。2.asp.net的问题,设置断点跟踪一下,然后就可以了。3.代码问题。比如在删除DataGrid里的一行数据的时候,删除之后是要重新绑定一下DataGrid的。
而在删除的代码里并没有重新绑定,而在第二次单击的时候,DataGrid才得到了重新的绑定,看起来好像是第二次点击的时候才执行。4.其他未知问题。
这个不算什么了,你有没有见过,奇数次点击无效,偶数次点击才有效的情况吗?我就遇到了。DataGrid的选择列产生的时事件,第一次点击:页面闪一下,没有执行代码。
第二次点击:页面闪一下,执行代码了。
第三次点击:页面闪一下,又不执行代码了。
第四次点击:页面闪一下,又执行代码了。
第五次点击:页面闪一下,又不执行代码了。
第六次点击:页面闪一下,又执行代码了。
......设置断点跟踪也是一样的情况。
请其他人测试,情况依旧。但是其他页面里的相同的事件,却没有问题。
if(!Page.IsPostBack)
{}
处理数据后重新绑定数据。
PageLoad事件中这样写会出现两次点击的情况
if ( !IsPostBack ) {
}else{
btn.Click +=new EventHandler(btn_Click);
}
因为click事件发生在page—load之后,事件是执行了,但页面上显示不出来。
我觉得这个人说的对,我碰到过同样的情况。
还有,比如把usercontrol修改property后的显示放在usercontrol的pageload中的话,也会出现类似的情况。