在后面的代码中从 Repeater 获取特定项目

Get specific item from Repeater in code behind

我有一个 ASP.NET WebForms 项目,它显示通过 Repeater 从数据库中读取的数据。中继器的代码如下所示:

<asp:Repeater ID="repRMAproduct" runat="server">
     <ItemTemplate>
          <tr>
               <td>
                    <%# Eval("Description") %>
               </td>
               <td>
                    <%#  Eval("Qty") %>
               </td>
               <td>
                    <asp:TextBox ID="tbNewQty" runat="server"></asp:TextBox>
               </td>
          </tr>
     </ItemTemplate>
</asp:Repeater>

我想要的是让用户只在他想输入的行上输入一个新的数量。然后,当他单击保存按钮时,我可以阅读这些新数量及其相关描述。

在 MVC 中,我应该使用 jQuery 构建 URL 并将其传递给控制器​​。但在 WebForms 中似乎不太直观。我从这里去哪里?

在您的保存按钮单击事件处理程序中,您可以循环所有项目并使用 FindControl:

获取 TextBox
foreach(RepeaterItem item in repRMAproduct.Items)
{
    TextBox tbNewQty = (TextBox) item.FindControl("tbNewQty");
    string newQuantity = tbNewQty.Text.Trim();
    int quantity;
    if(int.TryParse(newQuantity, out quantity))
    {
        SaveNewRmaQuantity(product, quantity);
    };
}

如果您使用 Label 作为您的产品描述,您可以使用 FindControl("LblDescriptionId") 获取它并将它的 Text 传递给 SaveNewRmaQuantity。您还可以使用不可见控件(Visible=false), f.e.a Label 来存储ProductId.