首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在动态调用link button onclick函数时传递命令参数?(c#)

如何在动态调用link button onclick函数时传递命令参数?(c#)
EN

Stack Overflow用户
提问于 2010-07-07 18:27:05
回答 3查看 30.6K关注 0票数 4

我有一个函数,我正在与其共享一组链接按钮。函数签名如下:

代码语言:javascript
复制
protected void FunctionName(object sender, EventArgs e)
{
 ...
}

现在我有大约4-5个链接按钮,我用它们来调用相同的函数,但只是通过命令参数来过滤东西,比如:

代码语言:javascript
复制
<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#编写的

我试着像这样调用这个函数

代码语言:javascript
复制
FunctionName(this, New EventArgs());

但是我不知道如何传递这个参数?

对此有什么想法吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-07 18:39:13

传递带有正确CommandArgument的LinkButton,而不是this:

代码语言:javascript
复制
FunctionName(lbAll, EventArgs.Empty)

但是您真的应该使用OnCommand事件而不是OnClickOnCommandCommandEventArgs作为第二个参数。因此,您可以在方法中使用e.CommandArgument获取它们。并调用width方法:

代码语言:javascript
复制
FunctionName(this, new CommandEventArgs("CommandName", "CommandArgument"));
票数 9
EN

Stack Overflow用户

发布于 2010-07-07 18:35:25

为清晰起见进行编辑

click事件的事件处理程序将有两个参数:一个发送者和一个事件args对象。发送者是触发事件的对象( linkbutton)。在该事件处理程序中,您可以将发送方强制转换为正确的对象类型并访问其属性。

代码语言:javascript
复制
((LinkButton)Sender).CommandArgument

使用此方法,您不需要显式传递参数,只需从发送方检索它即可。

或者(也许更好),您可以使用"OnComand“事件处理程序。查找您已经在http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandargument.aspx中使用的属性,您将看到此事件处理程序接收到一个CommandEventArgs参数,该参数具有一个公开CommandParameter对象的属性。例如:

代码语言:javascript
复制
void LinkButton_Command(Object sender, CommandEventArgs e) 
      {
         Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument;
      }

(从该MSDN页面)。

票数 5
EN

Stack Overflow用户

发布于 2010-07-07 18:51:05

好的。我想我错过了上一个答案的要点,因为我意识到这是一个从代码中的某个地方调用事件处理程序的问题,而不是那个事件。

我建议你重构你的事件处理程序,去掉它的功能,并把它放到一个或两个单独的方法中。例如在伪代码中:

代码语言:javascript
复制
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中的所有内容)。

我认为这更好地回答了你的问题。如果没有,我就直接回家了。;-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3193879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档