Problemi con asp: Button OnClick event
Domanda
Ecco il mio pulsante
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />
Ecco la funzione server
public void doSomething(int num)
{
int someOtherNum = 10 + num;
}
Quando provo a compilare il codice ottengo l'errore " Nome metodo previsto " per la linea:
<*>Cosa sto facendo di sbagliato? Non posso trasferire valori al server da un evento OnClick?
Soluzione
Ci sono due problemi qui. Innanzitutto, l'evento onclick ha una firma specifica. È
MethodName(object sender, EventArgs e);
In secondo luogo, nel markup, è necessario passare il nome del metodo solo senza parentesi o parametri.
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" />
Quindi cambia il codice dietro come segue:
public void doSomething(object sender, EventArgs e)
{
....
}
Il passaggio dei parametri può essere eseguito su un gestore eventi click lato client, in questo caso OnClientClick, ma non sul gestore lato server.
Altri suggerimenti
Esiste una soluzione più semplice. È possibile utilizzare l'evento OnCommand del pulsante ASP. Ulteriori informazioni qui: http: // msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx
OnClick of the Button è un gestore eventi. Per associare una funzione a un eventHandler devi obbedire al contratto che è stato definito da EventHandler, come menzionato di Jose. OnClick è associato a una funzione del formato void doSomething(object sender, EventArgs e)
. Quindi la tua funzione dovrebbe avere lo stesso formato.
Non sono sicuro del motivo per cui vorresti passare un parametro al gestore eventi. Se vuoi prendere un po 'di manipolazione devi farlo usando qualche altro controllo.
<asp:TextBox ID="txtNumber" runat="server" /><asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" />
E nel codice
public void doSomething(object sender, EventArgs e)
{
int AnotherNumber= Int32.Parse(txtNumber.Text)+10;
}
Devi cambiare la struttura del tuo metodo in modo che sia
public void doSomething(object sender, EventArgs e)
{
....
}
e per passare parametri è necessario aggirare il problema in questo modo:
ad esempio se in un controllo Html potresti ma il tuo parametro in un valore di attributo (come ID in questo esempio) e poi recuperarlo nel gestore lato server
ovvero fare un controllo cambiando il colore dello stile
Html:
<a href="" id="Grey" runat="server" onserverclick='ApplyStyleEvent'></a>
Codice:
protected void ApplyStyleEvent(object sender, EventArgs e)
{
Profile["SelectedStyle"] = ((HtmlControl)sender).ID;
Response.Redirect("");
}
e così via.