2009-09-15 4 views
1

J'ai un répéteur à l'intérieur d'un contrôle utilisateur.Utilisateur dans la page shoppingcart.aspx.Je souhaite accéder à tous lblPrice à partir de javascript à partir d'une fonction à l'intérieur du panier .aspx.Comment accéder à toutes ces étiquettes.étiquette d'accès à l'intérieur d'un répéteur ItemTemplate qui est à l'intérieur d'un usercontrol de asp.net page

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

Répondre

-1

Ce serait très facile pour vous si vous utilisez jquery. Veuillez vérifier l'exemple ci-dessous pour accéder aux contrôles asp.net sur la page principale. Vous pouvez vérifier l'article original here.

Vous pouvez également utiliser la propriété ClientId de contrôle dans le script Java.

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

Mais le problème avec l'approche ci-dessus est que vous devez faire de la ligne Javascript et il ne peut pas être externe.

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

Désolé de ne pas utiliser jquery et de ne pas utiliser de page maître. – Rohit

+0

alors vous pouvez utiliser la propriété ClientId. – Mahin

+0

Non, vous ne pouvez pas utiliser ClientID pour les contrôles à l'intérieur d'un répéteur. –

1

D'abord, vous prenez la clientID de votre contrôle utilisateur:

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

Ensuite, vous pouvez construire sur le clientID du répéteur:

var repeaterId = userControlId + '_rptShoppingCart'; 

Et vous pouvez accéder à tous les étiquettes lblPrix à l'intérieur du répéteur, comme ceci:

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

Il semble un peu hacky, et c'est en fait un peu hacky, mais il fait la chose et, si vous n'avez pas d'autre option, cela aide certainement. Et aussi, c'est vraiment rapide, si vous avez beaucoup d'éléments.

Ce "pour" aller à 500 peut être rendu plus agréable, mais c'est plus de code et je voulais garder la réponse courte.

Questions connexes