2012-02-20 329 views
1

我有一個網頁(ASP.NET C#),有一個按鈕:的JavaScript按鈕的onclick不工作

<asp:Button ID="btnHide" runat="server" OnClick="HidePanel" Text="Hide"/> 

,我正在做一個JavaScript警告,如:

public void HidePanel(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(),"Hello","<script type=text/javascript> alert('Hello') </script>"); 
} 

如果我修改函數沒有object senderEventArgs e然後我可以從Page_Load調用它,它工作正常,我得到警報。

正如上面所寫,我希望看到警報,當我點擊按鈕,但它沒有發生。我相信這是顯而易見的,但我沒有看到它。

+0

爲什麼不使用OnClientClick? – 2012-02-20 20:16:33

+0

你的代碼工作正常。 – Asdfg 2012-02-20 20:20:30

+0

我使用的是OnClick,因爲還有很多事情要發生,比如使用我們使用的第三方預訂系統檢查連接性和當前會話。 – Deverill 2012-02-20 20:23:30

回答

1

您可以刪除代碼註冊的JavaScript代碼,而是這樣做:

<asp:Button ID="btnHide" runat="server" 
    OnClick="HidePanel" Text="Hide" OnClientClick="alert('Hello');" 
    UseSubmitBehavior="false" />  

此:

UseSubmitBehavior="false" 

會導致按鈕觸發客戶端腳本,它會運行服務器端代碼(回發)。

+0

太棒了,謝謝! – Deverill 2012-02-20 20:34:26

3

使用OnClientClick而不是OnClick。並添加一個return false以避免在頁面上回傳。

<asp:Button ID="btnHide" runat="server" OnClientClick="alert('Hello'); return false;" Text="Hide"/> 
+0

在服務器端有很多步驟必須發生。如果我這樣做,我可以讓它在js處理單擊事件後運行我的服務器腳本,如果我沒有onclick? – Deverill 2012-02-20 20:25:53

+0

只需將OnClick添加回來並在OnClick方法上添加您的服務器端代碼即可。但在OnClientClick上留下警報,並刪除返回false,以便頁面回發並執行您的服務器端代碼。這將彈出警報,當你點擊確定後,頁面將回發,你的服務器端將執行。 – 2012-02-20 20:37:08

2

你可以嘗試使用, ClientScript.RegisterClientScriptBlock(的GetType(), 「nameOfScript」,scriptString);

我以前曾在點擊事件中使用過。

編輯: 我還無法編輯帖子,但您的代碼對我來說工作正常。

並根據情況,他可能想要做一些服務器端的東西以及點擊事件,或動態地建立腳本。

編輯: 如果您已經註冊了一個具有相同名稱的腳本,它將不會運行,例如。

Page.ClientScript.RegisterStartupScript(this.GetType(), "Hello", "<script type=text/javascript> var i = 0;</script>"); 
Page.ClientScript.RegisterStartupScript(this.GetType(), "Hello", "<script type=text/javascript> alert('other hello') </script>");