我有一个函数,我正在与其共享一组链接按钮。函数签名如下:
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());但是我不知道如何传递这个参数?
对此有什么想法吗?谢谢!
发布于 2010-07-07 18:39:13
传递带有正确CommandArgument的LinkButton,而不是this:
FunctionName(lbAll, EventArgs.Empty)但是您真的应该使用OnCommand事件而不是OnClick。OnCommand将CommandEventArgs作为第二个参数。因此,您可以在方法中使用e.CommandArgument获取它们。并调用width方法:
FunctionName(this, new CommandEventArgs("CommandName", "CommandArgument"));发布于 2010-07-07 18:35:25
为清晰起见进行编辑
click事件的事件处理程序将有两个参数:一个发送者和一个事件args对象。发送者是触发事件的对象( linkbutton)。在该事件处理程序中,您可以将发送方强制转换为正确的对象类型并访问其属性。
((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页面)。
发布于 2010-07-07 18:51:05
好的。我想我错过了上一个答案的要点,因为我意识到这是一个从代码中的某个地方调用事件处理程序的问题,而不是那个事件。
我建议你重构你的事件处理程序,去掉它的功能,并把它放到一个或两个单独的方法中。例如在伪代码中:
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
}这应该会让调用你需要的代码变得非常容易。尽管我不确定我是否认为仅仅因为你需要事件处理程序的一些功能就调用它是不好的做法。它看起来肯定比它需要的工作量更多。:)
当然,您也可以使用一个接受参数的方法,然后适当地处理它(有效地分解出FunctionName中的所有内容)。
我认为这更好地回答了你的问题。如果没有,我就直接回家了。;-)
https://stackoverflow.com/questions/3193879
复制相似问题