Проблемы с событием asp: Button OnClick - PullRequest
3 голосов
/ 17 июня 2009

Вот моя кнопка

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

Вот серверная функция

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

Когда я пытаюсь скомпилировать код, я получаю сообщение об ошибке «Ожидается имя метода» для строки:

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

Что я делаю не так? Разрешено ли передавать значения на сервер из события OnClick?

Ответы [ 4 ]

16 голосов
/ 17 июня 2009

Здесь есть две проблемы. Во-первых, событие onclick имеет определенную подпись. Это

MethodName(object sender, EventArgs e);

Во-вторых, в разметке вам нужно передавать имя метода только без скобок или параметров.

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

Затем измените свой код следующим образом:

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

Передача параметров может выполняться в обработчике событий щелчка на стороне клиента, в данном случае OnClientClick, но не в обработчике на стороне сервера.

2 голосов
/ 09 мая 2010

Есть более простое решение. Вы можете использовать ASP кнопку OnCommand событие. Подробнее здесь: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx

2 голосов
/ 17 июня 2009

OnClick of the Button - это обработчик событий. Чтобы подключить функцию к EventHandler, вам нужно подчиниться Контракту, который был определен EventHandler, как упомянутый Хосе. OnClick привязан к функции формата void doSomething(object sender, EventArgs e). Таким образом, ваша функция должна быть в том же формате.

Я не уверен, почему хотел бы передать параметр в обработчик событий. Если вы хотите использовать некоторую манипуляцию, вы должны сделать это с помощью другого элемента управления.

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

А в Коде

public void doSomething(object sender, EventArgs e)
{
int AnotherNumber=   Int32.Parse(txtNumber.Text)+10;
}
0 голосов
/ 26 мая 2015

Вы должны изменить структуру вашего метода так, чтобы она была похожа на

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

и для передачи параметров вам нужно обойти это так:

например, если вы используете элемент управления Html, вы можете указать свой параметр в качестве значения атрибута (например, ID в этом примере), а затем получить его в обработчике на стороне сервера

т.е. сделать элемент управления изменяющим цвет стиля

HTML:

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

Код:

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

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...