2009-06-17 17 views
3

は私のボタンである私は、私はエラーを取得するコードをコンパイルしようとすると、ここで問題:ボタンの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

ここには2つの問題があります。まず、onclickイベントには特定のシグネチャがあります。

MethodName(object sender, EventArgs e); 

第2に、マークアップでは、メソッド名をカッコまたはパラメータなしで渡す必要があります。その後

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

次のようにあなたの分離コードを変更します。

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

のパラメータの受け渡しは、クライアント側のクリックイベントハンドラで、この場合OnClientClickではなく、サーバー側のハンドラで行うことができます。

+0

したがって、サーバー側のメソッドである限り、そのメソッドに数値を渡す方法は絶対にありません。 – Matt

+0

これは正しいです。しかし、テキストボックスのような他の入力フィールドやイベントハンドラ内の隠れたコントロールから値を読み込んで、入力計算に使用することもできます。 –

2

ボタンのオンクリックはイベントハンドラです。関数をeventHandlerにフックするには、EventHandlerで定義された契約に従う必要があります(Joseによる、mentioned)。 OnClickは、フォーマットvoid doSomething(object sender, EventArgs e)の関数にバインドされています。したがって、関数は同じ形式でなければなりません。

なぜイベントハンドラにパラメータを渡したいのかわかりません。いくつかのマニュプレーティングをしたい場合は、他のコントロールを使って行う必要があります。

<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(""); 
} 

のように。

関連する問題