2012-10-11 155 views
0

我想用asp.net和jQuery手機做一個登錄頁面。防止頁面重新加載asp.net jquery javascript

當用戶點擊登錄按鈕時,我首先在c#中做一些處理,然後調用JavaScript。

問題是,當我點擊登錄按鈕,頁面似乎重新加載之前,它執行的JavaScript,我不希望這一點。

這裏是我的代碼:

<asp:Button name="login" ID="btnLogin" runat="server" Text="Login" OnClick="btnLogin_Click" /> 

C#:

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    if (String.Format("{0}", Request.Form["username"]) != "" && String.Format("{0}", Request.Form["password"]) != "") 
    { 

     ClientScript.RegisterStartupScript(GetType(), "key", "login();", true); 

    } 
    else 
    { 
     //todo 
    } 

} 

JS/jQuery的:

<script type="text/javascript"> 
    function login() { 
     jQuery(function() { 
      jQuery.ajax({ 
       beforeSend: function() { 
        $.mobile.loading('show', { 
         text: 'Processing...', 
         textVisible: true, 
         theme: 'a' 
        }); 
       }, 
       type: "GET", 
       url: "Handler.ashx", 
       data: "method=validate", 
       success: function (data) { 

        $.mobile.loading('hide'); 
        //$.mobile.changePage("HomePage.aspx", { transition: "fade" }); 

       } 
      }); 
     }); 
    }; 
</script> 

任何想法?

謝謝!

編輯:我還需要在服務器端代碼來處理口令加密是在C#

+0

當然,它會重新加載...您必須完全捕獲Javascript中的click事件,然後將所有數據傳遞到AJAX中的服務器。 –

+0

我忘了提及我的服務器端進程是使用C#中的類來加密密碼:/ – Distwo

+0

那麼問題是您的'login'方法沒有被調用?從你的代碼看,你並沒有調用它。 –

回答

1

OnClick事件是一個服務器端事件。這就是它回傳的原因。你想使用OnClientClick事件。這是爲了在調用OnClick事件之前運行客戶端代碼。

也就是說,在調用JavaScript之前,您需要運行哪些服務器端代碼?你究竟想要做什麼?

請詳細解釋處理流程。

+0

謝謝,我看到現在的問題在哪裏... 我的過程是: 當用戶單擊按鈕,服務器端我加密密碼,並將其作爲參數傳遞給我的JavaScript函數。 我的JavaScript函數將通過處理程序調用我的web服務(以繞過跨域衝突)。 加密方法在C#類中。 – Distwo

+0

爲什麼你需要調用C#函數_before_調用處理程序。在調用webservice之前,處理程序不能調用加密函數嗎? –

+0

嗯,我想過,但我想知道如果密碼會暴露在處理程序的ajax調用? – Distwo

0

這將允許您處理客戶端的點擊事件。 evt.preventDefault將確保該按鈕不會回發到服務器。

$('#btnLogin').click(function(evt) { 

    if(!myCondition) { 
     evt.preventDefault(); 
    } 
    else{ 
    } 
}); 
+0

我忘了提及我需要服務器端使用C#類來加密密碼。 – Distwo

+0

有趣的是,我從來沒有跨過'evt。的preventDefault()'。 evt.preventDefault()在功能上與使用'return false;'相同嗎? –

+1

好的討論在這裏:http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ –