首页 > 解决方案 > 如何在 ASP.NET 中引用 ItemTemplate 中的文本框

问题描述

我有以下 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>

我发现如果我将它放在 itemTemplate 中,我会得到“txtCurrBlack 在其当前上下文中不存在”。有没有办法可以正确引用该文本框?

标签: javascriptjqueryasp.net

解决方案


在您的问题中使用ClientIDlike<%= 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

}

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

类似问题:

使用 JavaScript 访问中继器值

如何将中继器中项目的客户端ID传递给javascript


推荐阅读