一、 二者的區別:
OnClick是button的服務器端事件
OnClientClick是button屬性,它里面執行的是js代碼,是在客戶端運行。
一般我們用 OnClientClick驗證我們的提交數據,但是這個一定要返回ture或者false,即一定要加上return,否則在客戶端驗證失效。如果是true那么就會執行后台的c#代碼,頁面也會進行提交刷新;否則就不執行,只會執行客戶端js代碼。
前台代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="test.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function clickBtn() { // alert("被點擊了!"); // return false; var yesORNo = confirm("確定點擊?"); if (yesORNo) { return true;//如果用戶點擊“確定”,就返回true,開始執行后台代碼! } else { return false; //如果用戶點擊“取消”,就返回false,不執行后台代碼! } } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:Button runat="server" ID="btnok" Text="點擊" onclick="btnok_Click" OnClientClick="return clickBtn()"/><%--方法1:在控件中添加js代碼--%> <asp:Button runat="server" ID="btnok2" Text="點擊2" onclick="btnok_Click" OnClientClick="return confirm('確定?')"/><%--方法2:在控件中添加js代碼--%> </div> </form> </body> </html>
后台代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace test { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnok_Click(object sender, EventArgs e) { Response.Write("這里是后台,按鈕被點擊了"); } } }
二、服務器控件調用js代碼
做網頁經常要和JavaScript打交道,經常要用JavaScript做一些客戶端的驗證,但是如果我們的按鈕用的是HTML控件的話,驗證通過后無法調用后台代碼,如果用服務器端控件,驗證不通過有要刷新頁面,這個有時候挺煩人的,能不能讓服務器端的按鈕調用客戶端的驗證,如果驗證成功后在調用服務器端的方法,這樣既減少了網路傳輸,給用戶感覺也好。
當我們用模板列做刪除數據的時候一般都會返回一個對話框詢問用戶是否確認,其實我們是通過修改模板列里的button的OnClientClick屬性將其值設為 return confirm("你確認刪除該條記錄嗎"); 我們可以分析一下,confirm返回的是個bool值,如果我的button返回的結果也是個bool應該也可以吧,我猜對了,比如有下面一些代碼 :
function judgeUserInput()
{
bool result = true;
if(驗證未通過)
{
result = false;
alert("請檢查您的輸入是否正確");
}
return result;
}
