我在用户控件中有一个转发器。用户控件在页面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>
答案 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>