<asp:Button ID="btn_check" runat="server" onclick="btn_check_Click" Text="校验" />
<button id="btn_check2" runat="server" onserverclick="btn_check_Click">校验</button>    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            tb_num.Focus();
        }
    }
    protected void btn_check_Click(object sender, EventArgs e)
    {
        string str = tb_num.Text;
        Regex reg = new Regex("^[0-9]{1,20}$");
        Match mat = reg.Match(str);        if (!mat.Success)
        {
            MessageBox.Show("请正确输入信息!!");
            tb_num.Focus();
            tb_num.Attributes.Add("onfocus", "this.select()");
            return;
        }
    }上面是我定义的一个ASP控件,一个HTML控件,两个服务器响应用的是一个事件,但是ASP的只刷新一次,而HTML的刷新两次,这是为什么?onclick和onserverclick两个服务器响应事件的具体流程是怎么走的?
还有,这两个控件的后台调客户端响应事件是不是像下面这样写?谢了!!
btn_check.Attributes.Add("OnClientClick", "....()");
btn_check2.Attributes.Add("onclick", "....()");

解决方案 »

  1.   

    有人说HTML控件不刷新,但是我试了一下,还是刷新啊!!
      

  2.   

    有的按钮用onclick就可以在服务器响应,而有的按钮要用onserverclick才可以在服务器响应。对于服务器按钮控件(即<asp:Button>类型的按钮): 
    服务器响应事件:OnClick 
    客户端响应属性:OnClientClick 对于html按钮控件(即<input type="button" runat="server">) 
    服务器响应事件:OnServerClick 
    客户端响应事件:onclick <input id="Submit2" runat="server" onserverclick="Submit1_ServerClick1" type="submit" value="录入信息" />
    摘自:http://www.cnblogs.com/lcl_1015/archive/2008/09/23/1297180.html
      

  3.   

    还有,这两个控件的后台调客户端响应事件是不是像下面这样写?谢了!! 
    btn_check.Attributes.Add("OnClientClick", "....()"); 
    btn_check2.Attributes.Add("onclick", "....()"); 
    可以这么写
    btnDel.Attributes["onclick"] = "javascript:if(!confirm('确定删除吗?')) return false;";
    这样就会为按钮注册一个客户端的onclick事件,当然也可以注册其它事件。
    当一个服务器端控件(只要带runat="server"无论是asp还是html都是服务器端控件)同时具有客户端的onclick事件和服务端的onclick事件时,先执行的为客户端事件,然后才会执行服务器端事件,例如:
    btnDel.Attributes["onclick"] = "javascript:if(!confirm('确定删除吗?')) return false;";
    当点击删除按钮时,就会执行onclick事件注册的代码,这时会弹出一个confirm,当点击确定按钮,那么就会去执行服务器端事件,否则就不执行。所以我们可以在客户端来控制是否去真正触发服务器端的事件。
    简言之,当客户端事件注册的代码块或其它js函数返回true值或无返回值时,就会执行服务器端方法,如果返回false就不会执行服务器端事件方法.