单击同一行中的按钮时获取转发器控件中的文本框值
Get textbox value in repeater control when button in same row is clicked
我有这个中继器:
<asp:Repeater ID="rptImages" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>Image</th>
<th>Caption</th>
<th> </th>
<th>Update File</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Image Width="108px" Height="67px" runat="server" ID="imgDb" ImageUrl='<%# Eval("imageUrl") %>' />
</td>
<td>
<asp:TextBox runat="server" style="margin-left: 5px; margin-right: 5px;" ID="txtCaption" Text='<%# Eval("caption") %>'></asp:TextBox>
</td>
<td>
<td><asp:FileUpload ID="fu" runat="server" /></td>
<td><asp:Button ID="btn" runat="server" Text="Update" CssClass="btn btn-info" CommandArgument='<%# Eval("id") %>' OnClick="btn_OnClick" /></td>
<td><asp:Button runat="server" ID="btnDelete" CssClass="btn btn-danger" CommandArgument='<%# Eval("id") %>' OnClick="btnDelete_OnClick" Text="Delete" /></td>
<td><asp:HiddenField ID="lblC" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "id") %>'></asp:HiddenField></td>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
我想知道如何从单击更新按钮的行中专门获取文本框。我应该使用什么逻辑来获取我需要的值?
您可以通过处理按钮上的 Click
事件然后获取其父控件来实现。但我建议改为处理转发器的命令:
<asp:Repeater ID="rptImages" runat="server"
OnItemCommand="rptImages_ItemCommand">
从按钮中删除处理程序,但保留命令 arg。如果中继器内有其他控件发送命令,您可能还想设置命令名称:
<asp:Button runat="server" ID="btnDelete" CssClass="btn btn-danger"
CommandArgument='<%# Eval("id") %>'
Text="Delete" />
这背后的代码变得微不足道:
protected void rptImages_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
TextBox t = e.Item.FindControl("txtCaption") as TextBox;
}
我有这个中继器:
<asp:Repeater ID="rptImages" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>Image</th>
<th>Caption</th>
<th> </th>
<th>Update File</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Image Width="108px" Height="67px" runat="server" ID="imgDb" ImageUrl='<%# Eval("imageUrl") %>' />
</td>
<td>
<asp:TextBox runat="server" style="margin-left: 5px; margin-right: 5px;" ID="txtCaption" Text='<%# Eval("caption") %>'></asp:TextBox>
</td>
<td>
<td><asp:FileUpload ID="fu" runat="server" /></td>
<td><asp:Button ID="btn" runat="server" Text="Update" CssClass="btn btn-info" CommandArgument='<%# Eval("id") %>' OnClick="btn_OnClick" /></td>
<td><asp:Button runat="server" ID="btnDelete" CssClass="btn btn-danger" CommandArgument='<%# Eval("id") %>' OnClick="btnDelete_OnClick" Text="Delete" /></td>
<td><asp:HiddenField ID="lblC" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "id") %>'></asp:HiddenField></td>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
我想知道如何从单击更新按钮的行中专门获取文本框。我应该使用什么逻辑来获取我需要的值?
您可以通过处理按钮上的 Click
事件然后获取其父控件来实现。但我建议改为处理转发器的命令:
<asp:Repeater ID="rptImages" runat="server"
OnItemCommand="rptImages_ItemCommand">
从按钮中删除处理程序,但保留命令 arg。如果中继器内有其他控件发送命令,您可能还想设置命令名称:
<asp:Button runat="server" ID="btnDelete" CssClass="btn btn-danger"
CommandArgument='<%# Eval("id") %>'
Text="Delete" />
这背后的代码变得微不足道:
protected void rptImages_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
TextBox t = e.Item.FindControl("txtCaption") as TextBox;
}