访问来自asp.net页面的usercontrol内的转发器ItemTemplate内的标签

时间:2009-09-15 08:03:28

标签: asp.net repeater

我在用户控件中有一个转发器。用户控件在页面shoppingcart.aspx.I想要从shoppingcart.aspx里面的函数访问javascript中的所有lblPrice。如何访问所有这些标签。

<asp:Repeater ID="rptShoppingCart" runat="server">
    <HeaderTemplate>
        <tr class="big_header_style">
            <td>
                Product(s)
            </td>
            <td>
                Description</td>
            <td>
                Quantity</td>
            <td>
                Price (INR)</td>
            <td>
                Total (INR)</td>
            <td>
                Remove?</td>
        </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr class="dg_item_style">
            <td align="center">
                <img src='<%# Page.ResolveUrl(Convert.ToString(DataBinder.Eval(Container.DataItem,"ProductInfo.thumbnailPath1")))%>'
                    width="90" height="90" /></td>
            <td>
                <asp:Label ID="lblProductName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"ProductInfo.productName") %>'></asp:Label></td>
            <td align="center">
                <input id="proQuantity" runat="server" type="text" size="1" value='<%#Eval("Quantity") %>' /></td>
            <td align="center">
                <strong class="redtxt">
                    <asp:Label ID="lblPrice" runat="server" Text='<%#GetPrice((BAL.ShoppingCartMaster)Container.DataItem)%>' /></strong></td>
            <td align="center">
                <strong class="redtxt">
                    <asp:Label ID="lblTotal" runat="server" Text='<%#calculatePrice((BAL.ShoppingCartMaster)Container.DataItem)%>'></asp:Label></strong>
            </td>                                                                                        
            <td align="center">
                <asp:CheckBox runat="server" ID="cbRemoveFromCart" />
                <asp:Label id="lblShoppingCartID" runat="server" visible="false" text='<%#Eval("ShoppingCartID") %>'></asp:Label>

            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

2 个答案:

答案 0 :(得分:1)

首先,您使用用户控件的clientID:

var userControlId = '<%= ShoppingCart1.ClientID %>';

然后,您可以构建转发器的clientID:

var repeaterId = userControlId + '_rptShoppingCart';

然后您可以访问转发器内的所有标签lblPrice,如下所示:

for (i = 0; i < 500; i++) {
    var rowNo = i;
    if (rowNo < 10)
        rowNo = "0" + rowNo;

    var lblPrice = document.getElementById(repeaterId + '_ctl' + rowNo + '_lblPrice');

    if (lblPrice != undefined)
        lblPrice.innerHTML = i * 10;
}

它看起来有点hacky,它实际上有点hacky,但它做的事情,如果你没有其他选择,它肯定会有所帮助。而且,如果你有很多元素,它真的很快。

“for”到500可以更好,但是代码更多,我想保持答案简短。

答案 1 :(得分:-1)

如果您正在使用jquery,那将非常容易。请查看以下示例,以访问母版页上的asp.net控件。您可以查看原始文章here.

您还可以在Java脚本中使用控件的ClientId属性。

document.getElementById("<%=txtFirstName.ClientID %>"); 

但上述方法存在的问题是你必须使Javascript内联而且它不能是外部的。

MasterPage

<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Access Control using jQuery</title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>

    <script src="Scripts/jquery-1.3.2.js"
    type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("input[id$='_txtName']").val("Text Added using jQuery");
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

    </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>




ContentPage

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master"

AutoEventWireup="true" CodeFile="MasterPage.aspx.cs" Inherits="MasterPage"%>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"

Runat="Server">

<asp:TextBox ID="txtName" runat="server"></asp:TextBox>

</asp:Content>