2014-02-05 63 views
0

我有一個JS函數(顯示警告框),並在ASP頁面中有一個鏈接按鈕,點擊此鏈接按鈕的代碼後面的事件我想調用此函數,然後重定向到某個頁面。從背後的代碼調用JS函數問題

ASP代碼

<script type="text/javascript" language="javascript"> 
    function myFunction() { 
     // executes when HTML-Document is loaded and DOM is ready 
     alert("document is ready!"); 
    }     
</script> 
<div> 
    <asp:LinkButton ID="lnkbtnChangePassword" runat="server" Text="Change Passwrod" OnClick="lnkbtnChangePassword_Click" ></asp:LinkButton> 
</div> 

C#代碼

protected void lnkbtnChangePassword_Click(object sender, EventArgs e) 
{ 
    ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "myFunction()", true); 
    Response.Redirect("myPage.aspx"); 
} 

這裏,當我點擊鏈接按鈕,它根本不顯示提示框/窗口,並重定向到這一頁。

回答

2

您應該使用LinkButton.ClientClick而不是LinkButton.Click事件。

Click事件在服務器上處理。當用戶點擊按鈕時,頁面被回發到服務器,代碼在服務器端被執行。

ClientClick事件實際上是應該執行的JavaScript函數的名稱。

你或許應該做這樣的事情:

<asp:LinkButton ID="lnkbtnChangePassword" runat="server" Text="Change Passwrod" OnClientClick="showMyAlertAndSubmit()"></asp:LinkButton> 

<script type="text/javascript"> 
function showMyAlertAndSubmit(){ 
    alert("Your password is being changed"); 
    // submit your form 
} 
</script> 

爲什麼你當前的代碼不起作用

您目前發送腳本顯示的消息,並在同一重定向時間。這意味着瀏覽器會收到指示以顯示消息並重定向,並在顯示消息之前重定向用戶。一種方法可能是從客戶端重定向。例如:

protected void lnkbtnChangePassword_Click(object sender, EventArgs e) 
{ 
    ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "myFunction()", true); 
} 

,並在客戶端

function myFunction() { 
    // show your message here 
    // do other things you need 
    // and then redirect here. Don't redirect from server side with Response.Redirect 
    window.location = "http://myserver/myPage.aspx"; 
} 

其他選項

,因爲你需要保存數據和轉向之前先進行服務器端的檢查,可以使用Ajax調用服務器而不執行回發。 刪除單擊處理程序,並且只使用ClientClick:

function myFunction() { 
    $.ajax({ 
     type: "POST", 
     url: "myPage.aspx/MyCheckMethod", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      ShowAlert(); 
      window.location = "http://myserver/mypage.aspx"; 
     } 
    }); 
} 

有關詳細信息please check this tutorial

+0

感謝您的答覆,但以後可能我想,所以我必須在後面的代碼使用顯示該消息之前添加一些代碼。 – AbdulAziz

+0

你能詳細解釋一下嗎?你想點擊,然後在服務器端做一些事情,然後回到客戶端?在這種情況下,你需要一種不同的方法。例如,在提交和重定向之前將AJAX調用到服務器。 –

+0

是的,先生,這是我想要的,當我點擊,然後在服務器端做一些事情,然後回到客戶端。我應該編輯我的問題嗎? – AbdulAziz

1

更改你的代碼是這樣的:

ASP代碼

<script type="text/javascript" language="javascript"> 
    function myFunction() { 
    // executes when HTML-Document is loaded and DOM is ready 
    alert("document is ready!"); 
    }     
</script> 
<div> 
    <asp:LinkButton ID="lnkbtnChangePassword" runat="server" Text="Change Passwrod" OnClick="lnkbtnChangePassword_Click" OnClientClick="myFunction()" ></asp:LinkButton> 
</div> 

C#代碼

protected void lnkbtnChangePassword_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("myPage.aspx"); 
} 
1

改變你的JavaScript函數:

<script type="text/javascript" language="javascript"> 
    function myFunction() { 
     // alert will stop js execution 
     alert("document is ready!"); 
     // then reload your page 
     __doPostBack('pagename','parameter'); 
    }     
</script> 

而且從代碼隱藏這一功能稱之爲:

protected void lnkbtnChangePassword_Click(object sender, EventArgs e) 
{ 
    //do your job here 
    //then call your js function 
    ScriptManager.RegisterStartupScript(this,this.GetType(), "CallMyFunction", "myFunction();", true); 
} 
+0

什麼是'pagename'和'parameter'? – AbdulAziz

+0

http://www.codeproject.com/Articles/667531/__doPostBack功能 – homega52

0

什麼你錯過了等待的JavaScript警告對話框彈出,然後重定向到該頁面。 爲了做到這一點,你需要告訴按鈕等待JavaScript警報對話框彈出,然後在服務器端工作。

ASPX:

<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function alertBeforeSubmit() { 
      return alert('Document Ready'); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button Text="Do" runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" OnClientClick="return alertBeforeSubmit();" /> 
    </div> 
    </form> 
</body> 

CS:

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("Default.aspx"); 
    } 
相關問題