Problemas con asp: evento de botón OnClick
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?
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.