这是我的按钮
<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事件向服务器传递值吗?
答案 0 :(得分:16)
这里有两个问题。首先,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,但不在服务器端处理程序上。
答案 1 :(得分:2)
按钮的OnClick是一个事件处理程序。要将函数挂钩到eventHandler,您需要遵守由EventHandler定义的契约,如Jose mentioned。 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;
}
答案 2 :(得分:2)
有更简单的解决方案。您可以使用ASP按钮OnCommand事件。 有关此处的更多信息:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.oncommand.aspx
答案 3 :(得分:0)
您必须将方法的结构更改为
public void doSomething(object sender, EventArgs e)
{
....
}
并且为了传递参数,你需要解决这个问题:
例如,如果您在Html控件中,您可以在属性值中使用您的参数(例如此exapmle中的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("");
}
等等。