2009-09-15 3 views
1

사용자 컨트롤 안에 리피터가 있습니다. shoppingcart.aspx 페이지의 사용자 컨트롤에 있습니다. 쇼핑 카트 내의 함수에서 자바 스크립트의 모든 lblPrice에 액세스하려고합니다. .aspx. 이러한 모든 레이블에 액세스하는 방법.리피터 내부의 액세스 레이블 asp.net 페이지에서 usercontrol 안에있는 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를 사용하는 경우 매우 쉽습니다. 마스터 페이지에서 asp.net 컨트롤에 액세스하는 방법은 아래 예제를 참조하십시오. 원본 기사를 확인할 수 있습니다 here.

Java 스크립트에서 제어의 ClientId 속성을 사용할 수도 있습니다.

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

위 접근법의 문제점은 자바 스크립트를 인라인으로 만들어야하고 외부에있을 수 없다는 것입니다.

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

+0

ClientId 속성을 사용할 수 있습니다. – Mahin

+0

아니요, Repeater 내의 컨트롤에 ClientID를 사용할 수 없습니다. –

1

먼저 당신은 사용자 정의 컨트롤의 클라이언트 ID 가지고 : 당신이 만들 수 있습니다, 그리고

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

을 그 중계기의 클라이언트 ID :

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

조금 엉뚱한 것처럼 보입니다. 실제로 조금 해킹되지만, 다른 옵션이 없다면 도움이됩니다. 그리고 많은 요소가 있다면 정말 빠릅니다.

"for"는 500으로 나눌 수 있지만 그보다 더 코드가 많아서 답을 짧게하고 싶습니다.

관련 문제