2009-06-17 1 views
3

Вот моя кнопкаПроблем с осиной: Кнопка OnClick событие

<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?

ответ

16

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

MethodName(object sender, EventArgs e); 

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

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

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

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

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

+0

Таким образом, нет способа передать этот метод количеству, если это метод на стороне сервера? – Matt

+0

Это правильно. Тем не менее, вы можете считывать значения из других полей ввода, таких как текстовые поля или даже скрытые элементы управления, внутри вашего обработчика событий и использовать их для ваших входных вычислений. –

2

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

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

<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

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

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

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

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

т. е. чтобы сделать элемент управления, изменяя цвет стиля

Html:

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

Код:

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

и так далее.