2009-09-15 63 views
1

我有一個用戶控件內的中繼器。頁面上的用戶控件shoppingcart.aspx.I想要從javascript中獲取所有lblPrice .aspx。如何訪問所有這些標籤。中繼器內的訪問標籤在asp.net頁面內的用戶控件內的ItemTemplate

<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> 

回答

-1

,如果你使用jQuery這將是對你非常容易。請查看以下示例以訪問Master Page上的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> 
+0

對不起,不使用jQuery和不使用母版頁。 – Rohit 2009-09-15 09:20:48

+0

然後你可以使用ClientId屬性。 – Mahin 2009-09-15 09:42:07

+0

不,您不能在Repeater內部使用ClientID作爲控件。 – 2009-12-01 08:31:46

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; 
} 

它看起來有點冒頭,實際上有點不好意思,但它確實有用,如果你沒有別的選擇,它肯定會有幫助。而且,如果你有很多元素,速度真的很快。

「500」可以變得更好,但它更代碼,我想保持答案的簡短。

相關問題