Problemas com asp: Button evento OnClick
Pergunta
Aqui está o meu botão
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />
Aqui é a função de servidor
public void doSomething(int num)
{
int someOtherNum = 10 + num;
}
Quando tento compilar o código eu recebo o erro "Nome do método esperado" para a linha:
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />
O que estou fazendo de errado? Não tenho o direito de passar valores para o servidor a partir de um evento onclick?
Solução
Há dois problemas aqui. Primeiro, o evento onclick tem uma assinatura específica. É
MethodName(object sender, EventArgs e);
Em segundo lugar, na marcação, você precisa passar o nome do método apenas com sem parênteses ou parâmetros.
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" />
Em seguida, mude o seu codebehind da seguinte forma:
public void doSomething(object sender, EventArgs e)
{
....
}
A passagem de parâmetros podem feito em um manipulador de eventos clique do lado do cliente, neste caso OnClientClick, mas não sobre o manipulador do lado do servidor.
Outras dicas
Não é a solução mais simples. Você pode usar o botão ASP OnCommand evento. Mais sobre aqui: http: // msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx
OnClick do botão é um manipulador de eventos. Para ligar uma função a um eventHandler você precisa obedecer o contrato que foi definido pelo EventHandler, como mencionado por José. OnClick é obrigado a função do void doSomething(object sender, EventArgs e)
formato. Portanto, sua função deve ser do mesmo formato.
Não tenho a certeza por que iria querer passar um parâmetro para o manipulador de eventos. Se você quiser levar algum manuplation você precisa fazer isso usando algum outro controle.
<asp:TextBox ID="txtNumber" runat="server" /><asp:Button ID="myButton" Text="Click Me" OnClick="doSomething" runat="server" />
E no Código
public void doSomething(object sender, EventArgs e)
{
int AnotherNumber= Int32.Parse(txtNumber.Text)+10;
}
Você deve mudar sua estrutura de método a ser como
public void doSomething(object sender, EventArgs e)
{
....
}
e para passar parâmetros você precisa de um trabalho em torno de como este:
Por exemplo, se você em um controle HTML que você pode, mas o seu parâmetro em um valor de atributo (como ID neste exapmle) e depois recuperá-lo no manipulador do lado do servidor
ou seja para fazer um controle mudando a cor 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("");
}
e assim por diante.