asp:Button OnClickイベントの問題
質問
ここに私のボタンがあります
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />
これはサーバー関数です
public void doSomething(int num)
{
int someOtherNum = 10 + num;
}
コードをコンパイルしようとすると、エラー<!> quot; Method Name Expected <!> quot;が表示されます。行の場合:
<*>間違っているのは何ですか? OnClickイベントからサーバーに値を渡すことはできませんか?
解決
ここには2つの問題があります。まず、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)で実行できますが、サーバー側のハンドラでは実行できません。
他のヒント
より簡単な解決策があります。 ASPボタンのOnCommandイベントを使用できます。 ここについての詳細: http:// msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx
ボタンのOnClickはイベントハンドラーです。関数をeventHandlerにフックするには、言及。 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;
}
メソッドの構造を次のように変更する必要があります
public void doSomething(object sender, EventArgs e)
{
....
}
パラメータを渡すには、次のような回避策が必要です:
たとえば、Htmlコントロールを使用している場合は、属性値(この例ではIDなど)のパラメーター以外はサーバー側ハンドラーで取得できます
i.eスタイルの色を変更するコントロールを作成する
Html:
<a href="" id="Grey" runat="server" onserverclick='ApplyStyleEvent'></a>
コード:
protected void ApplyStyleEvent(object sender, EventArgs e)
{
Profile["SelectedStyle"] = ((HtmlControl)sender).ID;
Response.Redirect("");
}
など。