在Asp.net中通过Button的CommandArgument传递多个参数

sar*_*ake 24 asp.net gridview commandargument

我有一个包含多行的gridview,每个都有一个Update按钮,当有人点击Update按钮时我需要传递2个值.除了用逗号分隔CommandArgument内的参数(古老而不优雅)之外,我如何传递多个参数?

<asp:LinkButton ID="UpdateButton" runat="server" CommandName="UpdateRow" CommandArgument="arg_value" Text="Update and Insert" OnCommand="CommandButton_Click" ></asp:LinkButton>
Run Code Online (Sandbox Code Playgroud)

请注意,无法从页面上的任何控件中检索值,因此不提供任何设计解决方案.请专注于提出的问题.提前致谢.

小智 74

您可以将分号分隔值作为命令参数传递,然后拆分字符串并使用它.

<asp:TemplateField ShowHeader="false">
    <ItemTemplate>
       <asp:LinkButton ID="lnkCustomize" Text="Customize"  CommandName="Customize"  CommandArgument='<%#Eval("IdTemplate") + ";" +Eval("EntityId")%>'  runat="server"> 
       </asp:LinkButton>   
    </ItemTemplate>   
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)

在服务器端

protected void gridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
      string[] arg = new string[2];
      arg = e.CommandArgument.ToString().Split(';');
      Session["IdTemplate"] = arg[0];
      Session["IdEntity"] = arg[1];
      Response.Redirect("Samplepage.aspx");
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!!!!


caz*_*lab 15

在探索之后,看起来Kelsey是正确的.

只需使用逗号或其他内容,并在您想要使用它时将其拆分.

  • 发现了这个:http://aspdotnetcodebook.blogspot.com/2008/09/how-to-pass-multiple-values-to.html (4认同)

cyb*_*spy 13

@Patrick的回答是一个好主意,值得更多的信任!您可以拥有任意数量的数据项,它们都是分开的,如果需要可以在客户端使用.

它们也可以以声明方式而不是代码方式添加.我只是为这样的GridView做了这个:

<asp:TemplateField HeaderText="Remind">
  <ItemTemplate>
    <asp:ImageButton ID="btnEmail"  
        data-rider-name="<%# ((Result)((GridViewRow) Container).DataItem).Rider %>"
        data-rider-email="<%# ((Result)((GridViewRow) Container).DataItem).RiderEmail %>"
        CommandName="Email" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/email.gif" />
  </ItemTemplate> 
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)

在RowCommand中,您执行此操作:

void gvMyView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Email")
    {
        var btnSender = (ImageButton)e.CommandSource;
        var riderName = btnSender.Attributes["data-rider-name"];
        var riderEmail = btnSender.Attributes["data-rider-email"];
        // Do something here
    }
}
Run Code Online (Sandbox Code Playgroud)

这比清除所有值和分隔符以及最后再次打开包装更加清晰.

不要忘记测试/清除从页面返回的任何数据,以防它被篡改!

  • 我喜欢这种方法,它尽可能接近强类型的项目,使用逗号和子字符串来分隔这种信息,虽然可行,但可能会变得一团糟。您需要了解参数的每个部分是什么,使用“数据-”容器更安全,并使代码更具可读性。 (2认同)

小智 5

我的方法是使用属性集合从代码后面添加HTML数据属性.这更适用于jquery和客户端脚本.

// This would likely be done with findControl in your grid OnItemCreated handler
LinkButton targetBtn = new LinkButton();


// Add attributes
targetBtn.Attributes.Add("data-{your data name here}", value.ToString() );
targetBtn.Attributes.Add("data-{your data name 2 here}", value2.ToString() );
Run Code Online (Sandbox Code Playgroud)

然后通过属性集合检索值

string val = targetBtn.Attributes["data-{your data name here}"].ToString();
Run Code Online (Sandbox Code Playgroud)