题是这样出的:我们为一个Button控件写Click事件,有时为什么要点击两次才执行事件中的代码?

解决方案 »

  1.   

    没明白怎么回事。。给你顶一下吧。。不过想实现点击两次在触发事件很easy,加个javascript的脚本就行了。但是问题好像不是这个意思,奇怪的问题
      

  2.   

    Button.Attributes.Add("onclick","需要执行的javascript语句")
    把这个page_load里
      

  3.   

    这种题考的是什么呀?
    在正确的程序里,是一次点击就执行了。如果按这样的题意,两种情况:
    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>
      

  4.   

    注意是:要点击两次才执行“事件中的代码”?只要是 Button 事件中的,都应该算是“事件中的代码”。
      

  5.   

    因为click事件发生在page—load之后,事件是执行了,但页面上显示不出来。
      

  6.   

    我们为一个Button控件写Click事件,有时为什么要点击两次才执行事件中的代码?曾经碰到过。不过忘记了当初是怎么解决的了。好像是因为page_load事件中忘记加postback的判定了
      

  7.   

    原因有很多了:1.第一次点击的时候没有真正的访问网页,只是用的客户端的缓存,或者是服务器的缓存。
      第二次点击的时候才真正的访问了网页,执行了代码。2.asp.net的问题,设置断点跟踪一下,然后就可以了。3.代码问题。比如在删除DataGrid里的一行数据的时候,删除之后是要重新绑定一下DataGrid的。
      而在删除的代码里并没有重新绑定,而在第二次单击的时候,DataGrid才得到了重新的绑定,看起来好像是第二次点击的时候才执行。4.其他未知问题。
    这个不算什么了,你有没有见过,奇数次点击无效,偶数次点击才有效的情况吗?我就遇到了。DataGrid的选择列产生的时事件,第一次点击:页面闪一下,没有执行代码。
    第二次点击:页面闪一下,执行代码了。
    第三次点击:页面闪一下,又不执行代码了。
    第四次点击:页面闪一下,又执行代码了。
    第五次点击:页面闪一下,又不执行代码了。
    第六次点击:页面闪一下,又执行代码了。
    ......设置断点跟踪也是一样的情况。
    请其他人测试,情况依旧。但是其他页面里的相同的事件,却没有问题。
      

  8.   

    是不是当第一次点击按钮的时候发生了页面上的回传事件,也就是如TextChanged事件等,如果这样,就算第一次点击按钮也不会触发事件的.因为会先执行TextChanged事件…….当点击第二次是才执行button事件
      

  9.   

    因为没有
    if(!Page.IsPostBack)
    {}
      

  10.   

    我遇到过,,,,解决方法是加了个Page.IsPostBack
      

  11.   

    因为计划生育、所以1+1=3;不然1+1=n; :)同意增加IsPostBack;
    处理数据后重新绑定数据。
      

  12.   

    protected System.Web.UI.WebControls.Button btn; 
    PageLoad事件中这样写会出现两次点击的情况
    if ( !IsPostBack ) {

    }else{
        btn.Click +=new EventHandler(btn_Click);
    }
      

  13.   

    回复人: zhoumins(zm) ( ) 信誉:100  2005-09-02 16:45:00  得分: 0  
     
     
       因为click事件发生在page—load之后,事件是执行了,但页面上显示不出来。
    我觉得这个人说的对,我碰到过同样的情况。
    还有,比如把usercontrol修改property后的显示放在usercontrol的pageload中的话,也会出现类似的情况。