0

I am generating buttons inside foreach loop

<% foreach (var myObject in myObjectList)
   {
%>
       <b>Text field</b>: <%= myObject.Text%><br>                     
       <asp:Button ID="" runat="server" OnClick="WaitQueueDeleteBtn_Click" CommandArgument="pass myObjectText" Text="Delete"/>

<% } %>

It seems that I cannot use myObject's field inside CommandArgument however myObjectList is accessible

i.e

<asp:Button ID="" runat="server" OnClick="WaitQueueDeleteBtn_Click" CommandArgument="<%#myObjectList.Count%>" Text="Delete"/>

The above statement would work but the one below would not

<asp:Button ID="" runat="server" OnClick="WaitQueueDeleteBtn_Click" CommandArgument="<%#myObject.Text %>" Text="Delete"/>

Any idea why? And how can I pass myObject's field values as CommandArgument?

Update:

Button method in class

protected void WaitQueueDeleteBtn_Click(object sender, EventArgs e)
{

}
Cybercop
  • 8,475
  • 21
  • 75
  • 135

1 Answers1

1

It's so easy with Repeater

Markup

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
    <ItemTemplate>
        <div><b>Text field</b>: <%# Eval("Text") %></div>
        <asp:Button runat="server" CommandArgument='<%# Eval("ID") %>' Text="Delete" />
    </ItemTemplate>
</asp:Repeater>

C#

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Repeater1.DataSource = YOUR_DATA_SOURCE; // myObjectList
        Repeater1.DataBind();

        // ...
    }
}

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandArgument == null) return;

    var id = int.Parse(e.CommandArgument.ToString());

    // your logic here ...
}

You can add multiple buttons and using CommandName can figure out which one clicked.

Hope this helps.

Mehdi Dehghani
  • 10,970
  • 6
  • 59
  • 64