C# 从代码隐藏中的中继器获取特定项目

C# 从代码隐藏中的中继器获取特定项目,c#,asp.net,.net,webforms,C#,Asp.net,.net,Webforms,我有一个ASP.NET WebForms项目,它显示通过中继器从数据库读取的数据。中继器的代码如下所示: <asp:Repeater ID="repRMAproduct" runat="server"> <ItemTemplate> <tr> <td> <%# Eval("Description") %> &

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

<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>

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


在MVC中,我应该使用jQuery构建URL并将其传递给控制器。但在网络表单中,它似乎不那么直观。我该怎么办

在“保存”按钮中,单击事件处理程序,您可以循环所有项目,并使用
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);
    };
}

如果要使用
标签
进行产品描述,可以使用
FindControl(“LblDescriptionId”)
获取标签,并将其
文本
传递给
SaveNewRmaQuantity
。您还可以使用不可见控件(
Visible=false)
,例如
标签
,来存储
ProductId

,在保存按钮单击事件处理程序中,您可以循环所有项,并使用
FindControl
获取
文本框

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);
    };
}

如果要使用
标签
进行产品描述,可以使用
FindControl(“LblDescriptionId”)
获取标签,并将其
文本
传递给
SaveNewRmaQuantity
。您还可以使用不可见控件(
Visible=false)
,例如
标签
,来存储
ProductId

如何确定修改了什么值?如果文本框不为空或其值为
!=评估(“数量”)
?未修改的值将有一个tbNewQty为空。同样,如果我在jQuery中构建URL,我可以自己检查。如何确定修改了什么值?如果文本框不为空或其值为
!=评估(“数量”)
?未修改的值将有一个tbNewQty为空。同样,如果我在jQuery中构建URL,我可以自己检查。谢谢你的回复。我试过你的代码,虽然它编译的时候告诉我ItemRepeater(“repRMAproduct”)不包含任何项目,尽管我通过查看前端知道它包含任何项目。有什么想法吗?在点击事件中。我应该在其他地方调用它吗?@MSOACC:我猜您在每次回发时都会对中继器进行数据绑定,例如在
Page\u Load
中。如果(!IsPostBack){DataBindRepeater();},则使用
。否则,如果没有更多的代码,就很难找到问题的原因。为什么会出现这样的问题?@MSOACC:因为中继器中的所有更改都已丢失,因此将使用数据库值重新创建。此外,不会触发中继器或其中控件的任何事件。启用ViewState后,无论如何都不需要它。感谢您的回复。我试过你的代码,虽然它编译的时候告诉我ItemRepeater(“repRMAproduct”)不包含任何项目,尽管我通过查看前端知道它包含任何项目。有什么想法吗?在点击事件中。我应该在其他地方调用它吗?@MSOACC:我猜您在每次回发时都会对中继器进行数据绑定,例如在
Page\u Load
中。如果(!IsPostBack){DataBindRepeater();}
,则使用
。否则,如果没有更多的代码,就很难找到问题的原因。为什么会出现这样的问题?@MSOACC:因为中继器中的所有更改都已丢失,因此将使用数据库值重新创建。此外,不会触发中继器或其中控件的任何事件。启用ViewState后,无论如何都不需要它。