2013-04-17 45 views
1

下面是我的代碼:的Visual Web Developer HTML按鈕onclick事件不火

的Default.aspx:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" 
    AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="TestAjax._Default" %>  

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
</asp:Content> 

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 

    //I set an onClick event on this button: 

    < input type = "button" id="btnCl" onclick = "doJob" /> 

</asp:Content> 

default.aspx.cs:

protected void Page_Load(object sender, EventArgs e) 
{ 
    //fires on page load; 
} 

void doJob() 
{ 
    //code here; 
} 

的問題是:

爲什麼沒有onclick事件觸發? (開Default.aspx的btnCL)

由於該input元件上

+0

您可能想要使用'',以便獲得服務器端事件。 – Belogix

回答

0

由於dojob()是一個服務器端的功能,但onclick是一個客戶端事件。您的JavaScript控制檯中可能出現錯誤,說明dojob()是未定義的函數。使用asp:Button而不是input來利用服務器端點擊事件。另外,dojob()應該是protected。通過不聲明保護級別,我認爲默認值是private,因此頁面控件甚至可能無法看到它。它應與事件處理程序的按鈕點擊:

protected void dojob(Object sender, EventArgs e) 
{ 

} 
+0

那麼如何使用onclick事件? – User2012384

+1

@ user2191496:你是什麼意思?你想使用服務器端事件(需要將頁面回發到服務器)還是使用客戶端事件(您目前正在嘗試這樣做)?目前還不清楚你想要做什麼,所以關於如何去做沒有明確的答案。 – David

+2

我猜他想做一個服務器端調用。我添加了一個答案顯示如何。我認爲他想要服務器端的原因是他試圖調用的代碼是在C#代碼隱藏文件中,而不是JavaScript。 – Belogix

1

您需要使用asp:Button控制是這樣的:

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 

,然後讓事件的方法是這樣的:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // your code here 
} 

當使用常規input標記時,onclick用於JavaScript,您必須改爲使用ASP.NET控件asp:Button以掛接C#方法。

1

正如OP在我的評論中所述,您當前的方法是進行客戶端調用(因此需要調用doJob的JavaScript函數,因此您需要進行服務器端調用,因此需要使用控件。你如何能做到這一點:

網頁(的.aspx)

<asp:Button ID="btnDoJob" Runat="server" Text="Do Job" OnClick="btnDoJob_Click" /> 

代碼隱藏(.CS)

protected void btnDoJob_Click(object sender, EventArgs e) 
{ 
    // Do your action here... 
}