在itemtemplate中访问文本框

时间:2014-05-09 22:12:08

标签: c# asp.net

我有两个文本框和一行按钮,一个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中的文本框?

1 个答案:

答案 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");
}