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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top