我有两个文本框和一行按钮,一个Repeater在Page_Load函数中动态生成一些行。
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td><asp:Label CssClass="form-control" disabled="true" runat="server"><%# DataBinder.Eval(Container.DataItem, "sid") %></asp:Label></td>
<td><asp:TextBox CssClass="form-control" runat="server" ID="quiz1"></asp:TextBox></td>
<td><asp:TextBox CssClass="form-control" runat="server" ID="quiz2"></asp:TextBox></td>
<td><asp:Button ID="add" CommandName="add" runat="server" OnClick="addQuiz" Text="Add" CssClass="btn btn-success btn-sm form-control"/></td>
</tr>
</ItemTemplate>
</asp:Repeater>
如何在单击行中的按钮时访问Repeater中的文本框?
答案 0 :(得分:2)
您在FindControl
上使用RepeaterItem
,这是TextBoxes的NamingContainer
。您可以通过将发件人转换为Button(或Control)并相应地转换它的NamingContainer
属性来获取它:
protected void addQuiz(Object sender, EventArgs e)
{
var btn = (Button) sender;
var item = (RepeaterItem) btn.NamingContainer;
var quiz1 = (TextBox) item.FindControl("quiz1");
var quiz2 = (TextBox) item.FindControl("quiz2");
}