如何将值传递给ListView中按钮的单击处理程序?

时间:2017-06-07 17:31:28

标签: c# asp.net webforms code-behind

在我的页面上我显示了数据库中的一些数据,每个项目都有按钮从数据库中删除它。

这是aspx:

 <asp:ListView ID="productList" runat="server"
                DataKeyNames="id_produkt"
                ItemType="Shop.Models.Produkt" SelectMethod="GetProducts">
                <ItemTemplate>
                    <tr>
                        <td><%#:Item.id_produkt%></td>
                        <td><%#:Item.nazwa_produkt%></td>
                        <td><%#:Item.cena%></td>
                        <td><%#:Item.poprzednia_cena%></td>
                        <td><%#:Item.Ilosc%></td>
                        <td>
                            <asp:Button CssClass="btn btn-info btn-sm" ID="Edytuj" runat="server" Text="Edytuj" OnClick="AddProductButton_Click" CausesValidation="true" />
                            <asp:Button CssClass="btn btn-danger btn-sm" ID="RemoveButton" runat="server" Text="Usuń Produkt" OnClick="RemoveProductButton_Click" CausesValidation="false" />
                            <a href="AdminPage_Details.aspx?productID=<%#:Item.id_produkt%>" class="btn btn-info btn-sm">Szczegóły</a>
                        </td>
                    </tr>
                </ItemTemplate>
                <ItemSeparatorTemplate></ItemSeparatorTemplate>
            </asp:ListView>

如何在代码隐藏方法中获得Item.id_produkt?

现在它看起来像这样:

protected void RemoveProductButton_Click(object sender, EventArgs e)
        {
            using (var _db = new Shop.Models.EgzemplarzContext())
            {
                int productId = Convert.ToInt16();
                var myItem = (from c in _db.Produkty where c.id_produkt == productId select c).FirstOrDefault();

                IQueryable<Egzemplarz> query = _db.Egzemplarze;
                query = query.Where(p => p.id_produkt == productId);

                if (myItem != null && query != null)
                {
                    foreach ( var item in query)
                    {
                        _db.Egzemplarze.Remove(item);
                    }

                    _db.Produkty.Remove(myItem);
                    _db.SaveChanges();

                    // Reload the page.
                    string pageUrl = Request.Url.AbsoluteUri.Substring(0, Request.Url.AbsoluteUri.Count() - Request.Url.Query.Count());
                    Response.Redirect(pageUrl + "?ProductAction=remove");
                }
                else
                {
                    LabelAddStatusDanger.Text = "Nie można usunąć produktu.";
                }
            }
        }

不知何故,我需要在此方法中从产品列表中获取Item.id_produkt。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

使用按钮的CommandArgument属性传递它。

标记:

<asp:Button ID="RemoveButton"
            runat="server"
            Text="Usuń Produkt"
            OnClick="RemoveProductButton_Click"
            CommandArgument='<%#:Item.id_produkt%>' />

代码背后:

protected void RemoveProductButton_Click(object sender, EventArgs e)
{
    var button = (Button)sender;
    var id_produkt = button.CommandArgument;
}

这会将ListView中按钮的CommandArgument设置为具有所需的产品ID。然后,当点击事件处理程序获得时,发件人将是您的按钮。我们需要将它转换为按钮类型才能访问CommandArgument属性。