2010-07-27 79 views
6

如果我同時使用onclick()onClientClick()我可以確保只有在客戶端函數返回TRUE之後纔會調用服務器端,反之亦然?onclick()和onClientClick()之間的區別?

例如:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Import Namespace="System.Xml" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<% 
protected void save_n_display(object sender, EventArgs e) 
{ 
    // This must be called when validate() returns true... 
} 
%> 

<asp:Button ID="Button1" OnClientClick="validate()" onClick="save_n _display" "Text="Check" runat="server" /> 


<script type="text/javascript" language="javascript"> 
    function validate() // client side Validation is done 
    { 

    } 
</script> 

所以我可以用onclick()onClientClick()或者我需要不同的東西這個? 我甚至嘗試從JavaScript傳遞變量到asp函數,所以當validate返回true時,save_n _display將被調用。

回答

4

但是,你得到你的客戶端點擊事件註冊它並不重要。儘管如果你使用的是服務器控件,那麼你確實想使用onclientclick。但關鍵是你想使用return Validate()。然後在你的validate方法中,你返回一個真或假的值,取決於它是否被驗證。

編輯:所以要的OnClientClick這個樣子:

onclientclick="return Validate();" 

然後在驗證功能:

function Validate() 
{ 
    return true; 
} 
+0

所以如果驗證返回false ...的onClick ownt被稱爲或笏? – 2010-07-27 17:39:08

+0

@Sangram是正確的,如果Validate()返回false,click事件將被取消 – Jiaaro 2010-07-27 18:00:36

0

我必須去找到實例...但我只是做了導通點擊事件。在代碼隱藏中,我運行了我的ServerSide代碼......或者我會在頁面上註冊一個腳本來調用JS驗證,然後運行代碼隱藏代碼。

Learn about RegisterStartupScript

OnClick="MyCodeBehindMethod()" 

然後,在代碼隱藏有:

//Verify and validate conditions 
    string script1="<script language=JavaScript>" 
    script1 += "Validate();" 
    script1 += "</script>" 
    Page.RegisterStartupScript("clientscript",script1);