Проблемы с событием asp: Button OnClick
Вопрос
Вот моя кнопка
<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("");
}
и т. д.