【问题标题】:How to obtain a textbox control from a div of repeater row?如何从中继器行的 div 中获取文本框控件?
【发布时间】:2014-01-30 12:31:40
【问题描述】:

我正在尝试制作购物车,当我按下其中一种产品的更新按钮以更新该产品的数量时,我需要获取属于它的文本框。

为了管理这一点,我将 productID 绑定到文本框所在的 div,这样我就可以获得正确的文本框。我的问题是如何获取这个文本框的值?

这里是 div

<td id="Td1" class="cart_update" runat="server" style="border-width: 0px 1px 1px 0px;">
    <div id='<%# DataBinder.Eval(Container.DataItem, "ProductID") %>' runat="server">
        <asp:TextBox ID="tbx" Text='<%# DataBinder.Eval(Container.DataItem, "ProductAmount") %>' CssClass="carttextbox" runat="server" />
        <asp:Button ID="btn_update" runat="server" OnCommand="btn_update_Click" Text="Update" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ProductID") %>' />
        <asp:Button ID="btn" runat="server" OnCommand="btn_Click" Text="Remove" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ProductID") %>' />
    </div>
</td>

到目前为止,这就是我在代码中的内容

protected void btn_update_Click(object sender, CommandEventArgs e)
{
    int command = Convert.ToInt32(e.CommandArgument);
    foreach(RepeaterItem item in Repeater1.Items)
    {
        TextBox tbx = find the right textbox;
        if(tbx != null)
        {
            foreach (ShoppingCart r in cart.shoppingcart)
            {
               if (r.ProductID == command)
               {
                   r.ProductAmount = Convert.ToInt32(tbx.Text);
               }
            }
         }
    }
}

【问题讨论】:

标签: c# asp.net webforms repeater


【解决方案1】:
foreach(RepeaterItem item in Repeater1.Items)
{
    var tbx = item.FindControl("tbx") as TextBox;
    if(tbx != null)
    {
        foreach (ShoppingCart r in cart.shoppingcart)
        {
           if (r.ProductID == command)
           {
               r.ProductAmount = Convert.ToInt32(tbx.Text);
           }
        }
     }
}

【讨论】:

    【解决方案2】:

    我会使用.FindControl() 方法。这个:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeateritem.findcontrol%28v=vs.110%29.aspx

    或者在更具体的情况下,我已经发现在 item.Controls 之间简单地循环(递归)很有用。

    【讨论】:

      【解决方案3】:

      使用以下代码

      foreach (RepeaterItem lvi in myRepeater.Items) {
      
      
      TextBox tb = (TextBoxcb )lvi.FindControl("myTextBox");
      
      
      }
      

      【讨论】:

      • 唯一的奇怪问题是列表中的 productamount 似乎没有改变。价格发生变化,但当我回到购物车时,金额又变回 1
      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      相关资源
      最近更新 更多