Вопрос

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

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

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

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

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

<*>

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

Это было полезно?

Решение

Здесь есть две проблемы. Во-первых, событие 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, но не в обработчике на стороне сервера.

Другие советы

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

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;
}

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

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("");
}

и т. д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top