2014-05-10 9 views
0

안녕하세요. 시간을내어 도와 주셔서 감사합니다.리피터 내부 텍스트 상자의 텍스트/값 변경

내 중계기 안에있는 텍스트 상자의 텍스트를 변경하려고합니다.

<asp:Repeater runat="server" ID="rpCategories"> 
         <HeaderTemplate> 
          <ul id="nav_down" class="nav_down"> 
         </HeaderTemplate> 
         <ItemTemplate> 
          <li><a href="<%# Eval("ID", "/products.aspx?id={0}") %>"><%# Eval("Title") %></a></li> 
         </ItemTemplate> 
         <FooterTemplate> 
          <li><a href="#"></a></li> 
          <li><a href="#">Contact</a></li> 
          <li><a id="cart_logo"></a> 
           <asp:Panel runat="server" ID="pnlBasket"> 
            <asp:textbox runat="server" id="txtTotalCount" Enabled="false" CssClass="ltTotalCount"></asp:textbox> 
           </asp:Panel> 
          </li> 
          </ul> 
         </FooterTemplate> 
        </asp:Repeater> 

텍스트를 변경하려는 id = "txtTotalCount"는 asp : textbox입니다.

여기 내 C# 코드입니다 :

TextBox ltTotalCount = (TextBox)FindControl("lblTotalCount"); 
ltTotalCount.Text = "1"; 

하지만이 코드를 실행하면이 오류를 얻을 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

누군가 내가 잘못하고있는 것을 말해 줄 수 있다면 너무 행복 할 것입니다.

답변

-1

ID는 렌더링 된 HTML에서 중복 ID를 방지하기 위해 '향상된'것일 수 있습니다. html을 보면이를 확인할 수 있습니다.

ID를 동일하게 유지하려면 텍스트 상자에 ClientIDMode="Static"을 추가 할 수 있습니다.

FindControl이 null을 반환하고 있지만 어쨌든 액세스하려고하므로 오류가 발생합니다.

[편집] 누군가가 이것이 작동하지 않아야한다고 지적했습니다. 나는 여기에 무엇이며, 동의 작업 : 당신은 텍스트 상자와 또한 해당 ID와 하나 이상의 텍스트 상자를 가지고 중계기는 매우 가능성이 있기 때문에 찾기 위해 부모 컨트롤과 중계기를 지정해야

Control FooterTemplate = rpCategories.Controls[rpCategories.Controls.Count - 1].Controls[0]; 

TextBox MyTextBox = FooterTemplate.FindControl("txtTotalCount") as TextBox; 
+0

도움이 될 것 같지 않습니다. ClientIDMode는 클라이언트 측 작업을위한 것이며 질문은 서버 측 ID에 대해 묻는 것입니다. 또한 사용자가 게시 한 코드는 잘못된 ID를 모두 함께 처리하는 코드입니다. clientidmode = "static"을 추가하는 것이 어떻게 도움이되는지 나는 알 수 없습니다. – tintyethan

+0

@ tintyethan - 동의합니다. 나는 나의 대답을 업데이트했다. –

0

Beclase lblTotalCount는 상위 컨트롤 안에 있습니다. 리피터 인 경우 리피터를 통해 참조해야합니다.

당신은 단지 다음과 같이의 FindControl 전에 중계기의 ID를 추가 할 수 있어야 ...

텍스트 상자 ltTotalCount = (텍스트 상자) rpCategories.FindControl ("lblTotalCount");

+0

도움을 주셔서 감사합니다. –

+0

코드에 업데이트를 추가했습니다. 작동하지 않는지 알려주세요. – tintyethan

+0

감사합니다. 귀하의 코드를 시도했지만 여전히 동일한 오류가 발생합니다. –

0

그래서 당신은 너무 같은 조사 할 리피터 항목을 지정해야합니다

TextBox ltTotalCount = rpCategories.Items[0].FindControl("txtTotalCount") as TextBox; 

이 중계기의 첫 번째 행에서 텍스트 상자를 반환합니다. 그리고 CssClass 값이 아닌 Id 값을 사용해야합니다.

관련 문제