作为我的问题的后续跟进Looping through a repeater control to get values of Textbox in asp.net 如果用户在文本框中输入了数量,我想从转发器控件中获取相应的ProductID值:
<asp:Repeater ID="rptRequestForm" runat="server">
<HeaderTemplate>
<table border="0" width="100%">
<tr>
<td style="width:50%" class="TextFontBold"><asp:Label runat="server" ID="Label1" Text="Supply Name"></asp:Label></td>
<td style="width:25%" class="TextFontBold"><asp:Label runat="server" ID="Label2" Text="Quantity"></asp:Label></td>
<td style="width:25%" class="TextFontBold"><asp:Label runat="server" ID="Label3" Text="Price (ea.)"></asp:Label></td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table border="0" width="100%">
<tr>
<td style="width:50%" class="TextFont"><asp:Label ID="lblProductName" Text="<%#Trim(Eval("Product_Title"))%>" ><%#Trim(Eval("Supplie_title"))%></asp:Label></td>
<td style="width:25%"><asp:TextBox ID="txtBox" runat="server" Width="30%" onblur="Javascript:numberonly(this)"></asp:TextBox></td>
<td style="width:25%" class="TextFont"><span><%#Trim(FormatCurrency(Eval("Price")))%></span></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
我的代码隐藏是:
For Each item As RepeaterItem In rptRequestForm.Items
txtField = item.FindControl("txtBox")
If Not IsNothing(txtField) Then
j += 1
strText = strText & ", " & txtField.Text
End If
Next
我正在使用FindControl循环文本框(以查看用户是否输入了有效数量)。如何获取相应ProductID的值?
答案 0 :(得分:1)
您可以将ProductId
存储在转发器ItemTemplate中的hidden field
中。然后,您可以使用相同的方式访问“产品ID”,因为您使用FindControl
答案 1 :(得分:1)
为ItemTemplate添加标签,如下所示:
<td style="width:50%" class="TextFont"><asp:Label ID="lblProductName" runat="server"><%#Trim(Eval("Product_Title"))%></asp:Label></td>
在你的代码背后,找到它是这样的:
foreach (RepeaterItem item in Repeater1.Items)
{
TextBox txtField = (TextBox)item.FindControl("txtBox");
//extract value from textbox
int Quantity = Convert.ToInt32(((TextBox)item.FindControl("txtBox").Text);
//extract the value from the label
string productName = ((Label)item.FindControl("lblProductName")).Text;
}
答案 2 :(得分:1)
您担心在没有数量的情况下获取产品名称,然后在分配之前进行评估。例如(基于@James的代码),您只需在IF Quantity > 0 THEN ...
之前添加string productName = ...
我对该代码做了一些更改,但是......
1)在尝试将对象转换为文本框之前检查对象是否存在。例如,IF NOT item.FindControl("txtBox") is NOTHING...
2)在尝试convert.toint32()
之前检查是否为空条件。例如,IF NOT string.isnullorempty(txtField)...
3)当您执行Quantity变量赋值时,您不需要FindControl,因为您已找到它(并将其分配给您的txtField变量)。所以只需int Quantity = Convert.ToInt32(txtField.Text);