C# 从代码隐藏中的中继器获取特定项目
我有一个ASP.NET WebForms项目,它显示通过中继器从数据库读取的数据。中继器的代码如下所示: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: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后,无论如何都不需要它。