【问题标题】:Finding controls in repeater on commandargument在命令参数的转发器中查找控件
【发布时间】:2026-01-05 08:50:01
【问题描述】:

我有一个中继器:

        <asp:Repeater ID="rpt_Items" OnItemCommand="rpt_Items_ItemCommand" runat="server">
            <ItemTemplate>
                <div class="item">
                    <div class="fr">
                        <asp:TextBox ID="tb_amount" runat="server">1</asp:TextBox>
                        <p>
                            <%# Eval("itemPrice") %>
                        </p>
                        <asp:LinkButton ID="lb_buy" CommandName="buy" runat="server">buy</asp:LinkButton>
                    </div>
                    <asp:HiddenField ID="hdn_ID" Value='<%# Eval("itemID") %>' runat="server" />
                </div>
            </ItemTemplate>
        </asp:Repeater>

在中继器命令参数上,我想获取文本框和隐藏字段,但我该怎么做?

protected void rpt_Items_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "buy")
    {
        //ADD ITEM TO CART
        Response.Write("ADDED");


        Product getProduct = db.Products.FirstOrDefault(p => p.ProductID == id);
        if (getProduct != null)
        {
            CartProduct product = new CartProduct()
            {
                Name = getProduct.ProductName,
                Number = amount,
                CurrentPrice = getProduct.ProductPrice,
                TotalPrice = amount * getProduct.ProductPrice,
            };
            cart.AddToCart(product);
        }

    }
}

非常感谢!

【问题讨论】:

    标签: c# asp.net repeater


    【解决方案1】:

    您不必通过命令参数传递它,您可以在您的rpt_Items_ItemCommand 方法中使用e.Item.FindControl(),如:

    TextBox tb_amount = (TextBox)e.Item.FindControl("tb_amount");
    HiddenField hdn_ID = (HiddenField)e.Item.FindControl("hdn_ID");
    

    【讨论】:

      最近更新 更多