asp:Button OnClick事件存在的问题

3
这是我的按钮。
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />

这是服务器函数

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

当我尝试编译代码时,对于以下行出现错误:“Method Name Expected”。
<asp:Button ID="myButton" Text="Click Me" OnClick="doSomething(10)" runat="server" />

我做错了什么?我不能从OnClick事件向服务器传递值吗?
4个回答

16

这里有两个问题。首先,onclick事件有一个特定的签名。它是:

MethodName(object sender, EventArgs e);

其次,在标记中,您需要仅传递方法名称,不带括号或参数。

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

然后将您的codebehind更改如下:

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

可以在客户端的点击事件处理程序(例如OnClientClick)中传递参数,但不能在服务器端处理程序中传递。


只要这个方法是服务器端的,就绝对无法将一个数字传递给它吗? - Matt
正确。但是你可以在事件处理程序中读取其他输入字段(如文本框甚至隐藏控件)中的值,然后将其用于输入计算。 - Jose Basilio

2
按钮的OnClick是一个事件处理程序。要将函数挂钩到事件处理程序上,您需要遵守事件处理程序定义的契约,正如Jose所提到的那样。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

0

你必须更改你的方法结构,使其像这样

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

等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接