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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top