许多具有相同ID的文本框

时间:2013-08-15 18:42:50

标签: c# html asp.net c#-4.0 for-loop

我有以下代码:

                <%for (int index = 1; index < 7; ++index) {%>
                    <tr>
                        <td>
                            <div class="indicacao_gdp">
                                <asp:TextBox ReadOnly="true" ID="inp_txt_indicacao_<%= index %>" CssClass="inp_txt_indicacao" runat="server" MaxLength="12"></asp:TextBox>
                            </div>
                        </td>
                        <td>
                            <div class="codigo_debito_credito_gdp">
                                <asp:TextBox ReadOnly="true" ID="inp_txt_codigo_debito_credito_<%= index %>" CssClass="inp_txt_codigo_debito_credito" runat="server" MaxLength="2"></asp:TextBox>
                            </div>
                        </td>
                        <td>
                            <div class="descricao_debito_credito_gdp">
                                <asp:TextBox ReadOnly="true" ID="inp_txt_descricao_debito_credito_<%= index %>" CssClass="inp_txt_descricao_debito_credito" runat="server" MaxLength="2"></asp:TextBox>
                            </div>
                        </td>
                        <td>
                            <div class="valor_debito_credito_gdp">
                                <asp:TextBox ReadOnly="true" ID="inp_txt_valor_debito_credito_inteiro_<%= index %>" CssClass="inp_txt_valor_inteiro" runat="server" MaxLength="8"></asp:TextBox>
                                ,
                                <asp:TextBox ReadOnly="true" ID="inp_txt_valor_debito_credito_decimal_<%= index %>" CssClass="inp_txt_valor_decimal" runat="server" MaxLength="2"></asp:TextBox>
                            </div>
                        </td>
                    </tr>
                <%}%>

但是,代码无效......

Parser Error Message: 'inp_txt_indicacao_<%= index %>' is not a valid identifier.

我是怎么解决的?

3 个答案:

答案 0 :(得分:2)

使用PlaceHolder控件并从代码隐藏中动态添加TextBox控件。在代码隐藏中,您可以轻松设置ID以及您喜欢的任何其他属性。

请参阅MSDN: Add Controls to an ASP.NET Web Page Programmatically

答案 1 :(得分:1)

你为什么需要这样做?如果使用runat =“server”,控件将永远不会具有相同的ID。如果将这些文本框包装在带有类的容器中,则可以通过jQuery轻松地从这些元素中获取数据。

答案 2 :(得分:0)

当你使用runat =&#34; server&#34;你正在创建.net对象而不是实际的html。

您有两个选项,您可以使用Repeater并将ID设置为ID =&#34; inp_txt_indicacao&#34; (.net将把它变得独一无二)。

或者不要使用&lt; asp:TextBox来定期

<input type="textbox" id="inp_txt_indicacao_<%= index %>" />

<强>中继器

网上有很多很好的教程,但现在很快就能理解。

要使用转发器,您需要将数据放入某种列表中。

Public Class TestClass

    Public Sub New(ByVal v1 As String, ByVal v2 As String)

        Value1 = v1
        Value2 = v2

    End Sub

    Public Property Value1() As String
    Public Property Value2() As String

End Class

    Dim tc As New List(Of TestClass)

    tc.Add(New TestClass("aa", "bb"))
    tc.Add(New TestClass("cc", "dd"))
    tc.Add(New TestClass("ee", "ff"))

您只需将数据绑定到转发器

    rpData.DataSource = tc
    rpData.DataBind()


    <asp:Repeater ID="rpData" runat="server">
    <HeaderTemplate>
        <table>
        <tr>
            <th>Header 1</th>
            <th>Header 2</th>
        </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><asp:TextBox ID="txtValue1" Text='<%# Bind("Value1") %>' runat="server" /></td>
            <td><asp:TextBox ID="txtValue2" Text='<%# Bind("Value2") %>' runat="server" /></td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
    </asp:Repeater>