e.asp按钮的CommandArgument不起作用

问题描述

| 我正在使用C#开发asp.net应用程序。 我创建了一个.aspx页面,并在页面的不同位置放置了四个按钮。 在服务器端,我只希望对所有四个按钮使用一次单击事件。 这是我的代码: aspx页面
<asp:Button ID=\"Button1\" runat=\"server\" CommandArgument=\"Button1\" onClick = \"allbuttons_Click\" />
<asp:Button ID=\"Button2\" runat=\"server\" CommandArgument=\"Button2\" onClick = \"allbuttons_Click\" />
<asp:Button ID=\"Button3\" runat=\"server\" CommandArgument=\"Button3\" onClick = \"allbuttons_Click\" />
<asp:Button ID=\"Button4\" runat=\"server\" CommandArgument=\"Button4\" onClick = \"allbuttons_Click\" />
CS页面
protected void allbuttons_Click(object sender,EventArgs e)
{
    //Here i want to kNow which button is pressed
    //e.CommandArgument gives an error
}
    

解决方法

@Tejs在他的评论中是正确的,看起来您想要这样的东西:
protected void allbuttons_Click(object sender,EventArgs e)
{
    var argument = ((Button)sender).CommandArgument;
}
    ,采用
OnCommand = 
protected void allbuttons_Click(object sender,CommandEventArgs e) { }
    ,实际上,您根本不需要传递CommandArgument即可知道您按下了哪个按钮。您可以获取按钮的ID,如下所示:
string id = ((Button)sender).ID;
    ,您可以按如下所示将命令文本分配给按钮:
protected void allbuttons_Click(Object sender,CommandEventArgs e) {
    switch(e.CommandName) {
        case \"Button1\":
            Message.Text = \"You clicked the First button\";
            break;
        case \"Button2\":
            Message.Text = \"You clicked the Second button\";
            break;
        case \"Button3\":
            Message.Text = \"You clicked Third button\";
            break;
        case \"Button4\":
            Message.Text =\"You clicked Fourth button\";
            break;
    }
}