OnClientClick是客户端事件处理方法,一般采用JavaScript进行处理,可以直接在浏览器中运行,不跟后台发生交互。
OnClick是服务器端事件处理方法,在服务器端,也就是IIS中运行。执行顺序为:点击按钮->页面回传(PostBack)->执行Click事件绑定的方法
我们通常使用OnClientClick事件来做一些客户端的检测,当然也可以把检测放在服务器端执行,但这样做的代价是与服务器进行交互,消耗资源。
如果一个按钮既有OnClientClick事件处理方法又有OnClick事件处理方法,当我们单击这个按钮时,先触发客户端事件,再触发服务器端事件,如果客户端事件返回值为false,那么服务器端对应的方法永远不会执行。这样就达到检测的目的,只有检测通过才能执行服务器端的方法。
<script type="text/javascript">
function ValidateData(){
var isValid = true;
var email = $("#ForegroundValidate_Index_Email").val();
var phone = $("#ForegroundValidate_Index_Phone").val();
var count = $("#ForegroundValidate_Index_Count").val();
//验证邮箱:Razor视图中@@表示邮箱中的@符号
//请注意:这里的正则表达式的写法和判断方法跟c#不一样
//正则表达式格式:/正则表达式/g,g表示全部查找
var regEmail = /\w+@@\w+\.\w+/;
var regPhone = /[1-9]\d{10}/;
if (!regEmail.test(email)) {
alert("邮箱格式错误!");
isValid = false;
}
if (!regPhone.test(phone)) {
alert("手机号格式错误!");
isValid = false;
}
if (!(/^\d+$/g).test(count)) {
alert("数量格式错误!");
isValid = false;
}
return isValid;
}
</script>
<asp:Button ID="btnSubmit" class="btn" runat="server" OnClientClick="return ValidateData();" Text="提交" OnClick="btnSubmit_Click" />
OnClientClick事件一定要return,否则OnClick事件都会执行。
示例代码如下:
哪怕ValidateData()方法始终返回false,但是OnClientClick=”ValidateData();”,所以点击按钮后OnClick事件始终会被触发。
<script type="text/javascript">
function ValidateData() {
return false;
}
</script>
<asp:Button ID="btnSubmit" class="btn" runat="server" OnClientClick="ValidateData();" Text="提交" OnClick="btnSubmit_Click" />