动态地给Id按钮,Commandargument发送值

时间:2017-08-30 14:54:51

标签: c# html asp.net

以下是Shop.aspx代码的一部分:

        <% foreach(var item in items){ %>
           ...
           <asp:Button id="btnBuy" runat="server" class="btn" Text="Buy" OnClick ="btnBuy_Click" CommandArgument='<%#Eval("item.id") %>' />
        <% } %>

我有一个循环,我为我的购物项目创建了几个按钮,我需要他们有我的项目的ID

protected void btnBuy_Click(object sender, EventArgs e)
    {
        int itemId = Convert.ToInt32(btnBuy.CommandArgument);
     }

点击后,我需要点击项目/按钮的ID,以便稍后将其保存在我的数据库中。

问题 -

当我点击按钮btnbuy.CommandArgument是“”。

1 个答案:

答案 0 :(得分:0)

这是错的:你用asp风格编写了c#。您必须使用Repeater,然后每按一次按钮即可管理ItemCommand

<强> .aspx的

<asp:Repeater ID="myRepeater" runat="server" OnItemCommand="myRepeater_ItemCommand">
<ItemTemplate>
   <asp:Label id="myLbl" runat="server" Text='<%# ((Item)(Container.DataItem)).ProductName %>'/>
   <asp:Button id="btnBuy" runat="server" CssClass="btn" Text="Buy" CommandName="Click" CommandArgument='<%# ((Item)(Container.DataItem)).ProductId %>' />
</ItemTemplate>
</asp:Repeater>

c#(例如OnLoad)

List<Item> myCollection = ...; // get list of items
myRepeater.DataSource = myCollection;
myRepeater.DataBind();

...

protected void myRepeater_ItemCommand(Object sender, RepeaterCommandEventArgs e) 
{
      if(e.CommandName == "Click")
      {
          int idRecord = Convert.ToInt32(e.CommandArgument);
          // do something using idRecord or
          // get sender properties: ((Button)e.CommandSource).Text
      }
}