我有一个功能,我正在与其共享一组链接按钮。 函数签名就像:
protected void FunctionName(object sender, EventArgs e)
{
...
}
现在我有大约4-5个链接按钮,我用来调用相同的功能,但只是通过命令参数过滤东西,如:
<asp:LinkButton ID="lbAll" runat="server" Text="All"
CommandArgument="all" OnClick="FunctionName"></asp:LinkButton>
<asp:LinkButton ID="lbTop" runat="server" Text="Top"
CommandArgument="top" OnClick="FunctionName"></asp:LinkButton>
(...)
现在,我有一个下拉框,它本质上需要做同样的事情(只有两个选定的值),我只需要调用这个函数并将“all”或“top”参数传递给函数:“FunctionName”
这是在C#
我试着将这个功能称为
FunctionName(this, New EventArgs());
但我不知道如何通过论证?
有关于此的任何想法吗? 谢谢!
答案 0 :(得分:9)
将LinkButton传递给正确的CommandArgument
而不是:
FunctionName(lbAll, EventArgs.Empty)
但你真的应该使用OnCommand
事件而不是OnClick
。 OnCommand
有CommandEventArgs
作为第二个参数。因此,您可以在方法中使用e.CommandArgument
获取它们。并调用方法width:
FunctionName(this, new CommandEventArgs("CommandName", "CommandArgument"));
答案 1 :(得分:5)
编辑
click事件的事件处理程序将包含两个参数:sender和event args对象。发件人是触发事件的对象(链接按钮)。在该事件处理程序中,您可以将发件人强制转换为正确的对象类型并访问其属性。
((LinkButton)Sender).CommandArgument
使用此方法,您无需显式传递参数,只需从发件人检索它即可。
或者(可能更好)您可以使用“OnComand”事件处理程序。查找已在http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandargument.aspx使用的属性,您将看到此事件处理程序接收到CommandEventArgs参数,该参数具有公开CommandParameter对象的属性。例如:
void LinkButton_Command(Object sender, CommandEventArgs e)
{
Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument;
}
(来自该MSDN页面)。
答案 2 :(得分:2)
行。我想我在最后一个答案上错过了我的观点,他已经意识到从代码中的某个地方调用事件处理程序的问题不是那个事件......
我建议您重构事件处理程序以取出功能并将其放入一个或两个单独的方法中。例如,在伪代码中:
protected void FunctionName(object sender, EventArgs e)
{
if (top)
DoTop();
else if (all)
DoAll();
}
private void DoTop()
{
//do stuff
}
private void DoAll()
{
//Do different stuff
}
这应该可以让您轻松调用所需的代码。 Althoguh我不确定我怀疑它只是因为你需要它的一些功能来调用一个事件处理程序。它看起来肯定比需要更多的工作。 :)
当然,你可以使用一个方法来获取一个参数,然后适当地处理它(有效地分解FunctionName中的所有内容)。
我认为这会更好地回答你的问题。如果不是我只是要回家。 ; - )