如何引用ASP.NET中ItemTemplate内部的文本框

时间:2018-04-26 19:34:51

标签: javascript jquery asp.net

我有以下Jquery函数

<script type='text/javascript'>
    $(function () {



        var msgbox = $("#status");


        $( '<%= txtCurrBlk.ClientID %>').on('keyup', function () {
            alert("The paragraph was clicked.");
            $.ajax({
                    type: "POST",


                    url: "MonthlyCopyReadings.aspx/readingTextChanged",


            data: "{}",

            contentType: "application/json; charset=utf-8",
            dataType: "json",

            success: function(msg) {

                msgbox.html(msg.d);

            }

            });

        });

    });

txtCurrBlk来自以下代码块

 <asp:Repeater  runat="server" ID="rptMeterReads" > 
        <ItemTemplate>
            <tr>

                <td><%#Eval("serialNum") %></td>
                <td style="display:none"><asp:Label ID="lblMfdId" runat="server" Text='<%#Eval("mfdId") %>'/></td>
                <td><%#Eval("contractNum") %></td>
                <td><%#Eval("model") %></td>
                <td><asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%#Eval("ipAddress") %>'><%#Eval("ipAddress") %></asp:HyperLink></td>
                <td><%#Eval("password") %></td>
                <td><asp:Label ID="lblPrevBlk" runat="server" Text='<%#Eval("previousBlack") %>' /></td>
                <td><asp:TextBox ID="txtCurrBlk" runat="server" style="width:80px" Text='<%#Eval("currentBlack") %>' AutoPostBack="true" /></td>
                <td><asp:Label ID="lblTotalBlk" runat="server" /> </td>
                <td><asp:Label ID="lblPrevClr" runat="server" Text='<%#Eval("previousColour") %>' /></td>
                <td><asp:TextBox ID="txtCurrClr" runat="server" style="width:80px" Text='<%#Eval("currentColour") %>' Autopostback="true" /></td>
                <td><asp:Label ID="lblTotalClr" runat="server" /> </td>
                <%--<td><asp:CheckBox ID="isColor" Checked='<%#Eval("") %>' runat="server" ReadOnly="True"/></td>--%>
            </tr>
        </ItemTemplate>
     </asp:Repeater>

我发现我得到&#34; txtCurrBlack在其当前上下文中不存在&#34;如果我在itemTemplate中有它。有没有办法可以正确引用该文本框?

1 个答案:

答案 0 :(得分:0)

在您的问题中使用ClientID之类的<%= txtCurrBlk.ClientID %>不起作用,因为每个服务器控制分配有不同ID的模板内部(请注意重复或动态创建的HTML元素不能具有重复ID)并且您需要使用FindControl来获取后面代码中的控件,如下所示:

<%= Container.FindControl("txtCurrBlk").ClientID %>

将文本框元素置于转发器控件内的最简单方法是设置CssClass属性,如下所示:

<asp:TextBox ID="txtCurrBlk" runat="server" style="width:80px" CssClass="currBlk" Text='<%#Eval("currentBlack") %>' AutoPostBack="true" />

由于转发器内的文本框具有许多元素ID,因此我们无法使用id属性来绑定它们上的事件。使用上面提到的CSS类名作为jQuery选择器:

// n = element index
$('.currBlk').on('keyup', function () {
    alert("The paragraph was clicked.");

    // other stuff

}

提示:如果要将事件与指定了索引的HTML元素绑定,可以使用jQuery eq()方法。

类似问题:

Access Repeater values using JavaScript

How to pass client id of Item in repeater to javascript