2009-06-17 98 views
3

這裏是我的按鈕問題與ASP:按鈕OnClick事件

<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" /> 

這裏是服務器功能

public void doSomething(int num) 
{ 
    int someOtherNum = 10 + num; 
} 

當我嘗試編譯代碼我得到的錯誤「預期方法名稱」該行:

<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" /> 

我做錯了什麼?我不允許通過OnClick事件將值傳遞給服務器嗎?

回答

16

這裏有兩個問題。首先,onclick事件具有特定的簽名。它是

MethodName(object sender, EventArgs e); 

其次,在標記中,您需要傳遞方法名稱只有沒有括號或參數。

<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" /> 

然後改變你的代碼隱藏如下:

public void doSomething(object sender, EventArgs e) 
{ 
    .... 
} 

參數的傳遞可以在客戶端點擊事件處理完成,在這種情況下的OnClientClick,但不是在服務器端的處理程序。

+0

因此,只要它是服務器端方法,絕對沒有辦法將該方法傳遞給一個數字? – Matt 2009-06-17 07:13:05

2

OnClick的按鈕是一個事件處理程序。要將一個函數掛接到eventHandler,您需要遵守由EventHandler定義的合同,如Jose的mentioned。 OnClick綁定到格式爲void doSomething(object sender, EventArgs e)的函數。所以你的功能應該是相同的格式。

我不確定爲什麼要傳遞參數給事件處理程序。如果你想採取一些manuplation,你需要使用其他控制。

<asp:TextBox ID="txtNumber" runat="server" /><asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" /> 

並在代碼

public void doSomething(object sender, EventArgs e) 
{ 
int AnotherNumber= Int32.Parse(txtNumber.Text)+10; 
} 
0

你必須改變你的方法的結構是一樣

public void doSomething(object sender, EventArgs e) 
    { 
     .... 
    } 

和傳遞參數,你需要周圍的工作是這樣的:

例如,如果你在一個HTML控件你可以但是你的參數在一個屬性值(例如這個exapmle中的ID)中,然後在服務器端處理器中檢索它

即,使一個控件改變樣式顏色

HTML:

<a href="" id="Grey" runat="server" onserverclick='ApplyStyleEvent'></a> 

代碼:

protected void ApplyStyleEvent(object sender, EventArgs e) 
{ 
    Profile["SelectedStyle"] = ((HtmlControl)sender).ID; 
    Response.Redirect(""); 
} 

等。