Pregunta

Aquí está mi botón

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

Aquí está la función del servidor

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

Cuando intento compilar el código, aparece el error " Nombre del método esperado " para la línea:

<*>

¿Qué estoy haciendo mal? ¿No se me permite pasar valores al servidor desde un evento de OnClick?

¿Fue útil?

Solución

Hay dos problemas aquí. Primero, el evento onclick tiene una firma específica. Es

MethodName(object sender, EventArgs e);

En segundo lugar, en el marcado, debe pasar el nombre del Método solo sin paréntesis o parámetros.

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

Luego cambie su código detrás de la siguiente manera:

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

El paso de parámetros se puede hacer en un controlador de eventos de clic del lado del cliente, en este caso OnClientClick, pero no en el controlador del lado del servidor.

Otros consejos

Hay una solución más simple. Podrías usar el botón ASP evento OnCommand. Más información aquí: http: // msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx

OnClick del botón es un controlador de eventos. Para conectar una función a un EventHandler, debe obedecer el Contrato definido por EventHandler, como mencionado por Jose. OnClick está vinculado a una función del formato void doSomething(object sender, EventArgs e). Por lo tanto, su función debe tener el mismo formato.

No estoy seguro de por qué querría pasar un parámetro al controlador de eventos. Si desea tomar alguna manuplación, debe hacerlo usando algún otro control.

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

Y en el Código

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

Debe cambiar la estructura de su método para que sea como

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

y para pasar parámetros necesita una solución como esta:

por ejemplo, si está en un control Html, puede pero su parámetro en un valor de atributo (como ID en este ejemplo) y luego recuperarlo en el controlador del lado del servidor

es decir, hacer un control cambiando el color del estilo

Html:

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

Código:

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

y así sucesivamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top