OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在IE端运行,一点击就运行

OnClick是服务器端事件处理方法,在服务器端也就是IIS中运行,点击后,先执行postback,再运行

OnClientClick常用来做一些客户端的检测。当然也可以放在服务器端检测,但是需要与服务器进行交互,消耗资源,而且用户体验也不好。

当一个控件上同时有OnClick和OnClientClick时,OnClientClick先于OnClick执行

正确的写法应该是:

<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" OnClientClick="return saveFunc();" />

saveFunc对数据进行验证,当验证通过返回true时,执行服务器端方法进行保存,验证不通过返回false,服务器端的保存方法就不会执行。

错误的写法:

<!--无论验证是否通过,都会执行服务器端方法,不能达到验证的目的-->
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" OnClientClick="saveFunc();" /> <!--无论验证结果如何都返回false,服务器端方法永远不会执行-->
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" OnClientClick="saveFunc(); return false;" />

下面以 HTML的按钮(system.web.ui.htmlcontrols) 和 ASP.NET服务端按钮 (system.web.ui.webcontrols) 为例:
1. HTML控件,如IMG的输入按钮等 的 onclick ( 客户端) 和 onserverclick(服务端) 事件,

注意 runat="server"

<input type="button" id="btn" name="btn" value="button" runat="server" onserverclick="ServerSideEvent" onclick="SideScript" />

此处的onclick先于onserverclick执行。
2.WEB控件,如<asp:button 按钮等 的 onclientclick (客户端) 和 onclick (服务端) 事件。。。

<asp:Button ID="btn" text="button" runat="server"  OnClick="SideScript" OnClientClick="ClientSideScript" />

此处的onclientclick先于onclick执行。
onclientclick  事件来自2.0, 它用来取代下列代码。。。

btn.Attributes.Add("onclick","SideScript");

总之,客户端点击事件先于服务器端点击事件执行。也就是说,先执行客户端的Javascript,然后

到服务器端执行服务器的相关代码。

<%@ Page Language="C#"AutoEventWireup="true"CodeBehind="WebForm2.aspx.cs"Inherits="CaiPiao.WebForm2"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
    <title></title>
    <scripttype="text/javascript">
        function fnIsSearch() {
            return true;
        }
    </script>
</head>

<body>
    <formid="form1" runat="server">
    <div>
    <inputid="btnImport"type="submit"runat="server"value="导出" onserverclick="btnImport_Click"/>
    </div>
    </form>
</body>
</html>

后台代码
[code=C#]
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CaiPiao
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.btnImport.Attributes.Add("onclick", "return fnIsSearch();");
        }
        public void btnImport_Click(object sender, EventArgs e)
        {
            Response.Write("测试");
        }
    }
}

转自:http://blog.csdn.net/coolpig86/article/details/5439560

OnClick,OnClientClick和OnServerClick的区别的更多相关文章

  1. onclick事件与onserverclick事件

    1.这里仅对web控件而言,onclick事件执行的是客户端中的代码, <%@ Page Language="C#" AutoEventWireup="true&q ...

  2. 超链接a标签的href与onclick中使用javascript的区别

    onclick中javascript的区别一般没用到都没注意,但出错时才有些郁闷,看文本章解释如下: 以前一直很随意,后来看.net里的linkbutton似乎是用在<a href=" ...

  3. href="javascript:xxx(this);"和onclick="javascript:xxx(this);"的区别

    href="javascript:xxx(this);"和onclick="javascript:xxx(this);" 一直以为这两种写法是等同的,今天在项目 ...

  4. a标签的onclick和href事件的区别

    在执行顺序上href是低于onclick的,那么这个会造成什么影响呢 <div onclick="a()"> <a href="#" oncl ...

  5. onchange、onclick、onblur等事件区别

    onblur:控件在失去焦点的时候触发 OnChange:当控件的内容发生改变时触发该事件 OnClick:点击该控件时触发 OnKeyDown:在控件有焦点的情况下,按下键时发生 OnKeyUp:在 ...

  6. asp.net中<input type=button>无法调用后台函数

    例如:用<input id="bt1" type="button" runat="server" Onclick="btnL ...

  7. HTML 控件和web控件 OnClientClick和OnClick OnServerClick区别

      ^_^ 本来对html控件,服务器控件的知识模模糊糊的.今天特地查了相关的知识. 下面是我写代码总结的. 这些事件   主要用于在客户端执行验证,然后决定是否执行服务端事件   (没接触之前就为此 ...

  8. onClick,onServerClick,onClientClick

    <asp:button id=button1 runat=server test=button1 onclick=button1_onclick/> <input type=butt ...

  9. Html A标签中 href 和 onclick用法、区别、优先级别

    原文:Html A标签中 href 和 onclick用法.区别.优先级别 如果不设置 href属性在IE6下面会不响应hover.双击后会选中标签的父容器而非这个一a标签(IE下都存在这一问题). ...

随机推荐

  1. C# List<T> 泛型

    1.简介 所属命名空间:System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类.该类使用大小可按需动态增加的数组实现 IList< ...

  2. [工具] 将Sublime Text 3配置为C++代码编辑器

    { "path": "C:\\Dev-Cpp\\bin", "cmd": ["g++.exe", "${fil ...

  3. Android KITKAT 以上实现沉浸式状态栏

    extends:http://www.jianshu.com/p/f8374d6267ef 代码未行,效果先上 Flyme4.2 Android4.4.4上运行效果 如何实现 在 KITKAT 之后, ...

  4. 仿QQ、微信翻页查看聊天记录

    主界面MainActivity.class public class MainActivity extends Activity implements OnScrollListener{ privat ...

  5. Java--static、final、static final的区别

    一.final final修饰类:表示该类不能被继承:final类中的方法默认是final的: final修饰方法:表示该方法无法被重写: final修饰方法参数:表示在变量的生存期中它的值不能被改变 ...

  6. HDU-1394 Minimum Inversion Number(线段树求逆序数)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  7. ASP.NET MVC中ViewBag和ViewData的区别

    在MVC3.0以上我们会用到ViewBag或者ViewData进行页面传值,对比一下二者的差距: ViewData ViewBag 基于key/value的字典集合 dynamic类型对象 从ASP. ...

  8. HDU 1281 - 棋盘游戏 - [二分图最大匹配]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1281 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  9. 学习计划 mysql 主从复制

    网上资料繁多,需要跳多少坑才能实现,跳跳就知道了. -- 主从复制 如题:主数据库进行的操作,从数据库进行备份. -- 原理 有关于这方面的原理网上也是一搜一大片,去看看吧.肯定没错. 这里简单说一下 ...

  10. (1.2)mysql 索引概念

    索引的存储分类:mysql目前提供了以下4种索引 [1]B-Tree索引:最常见的索引类型,大部分引擎都支持B树索引 [2]HASH索引:只有Memory引擎支持,使用场景简单 [3]R-Tree索引 ...