2011-09-05 13 views
0

內部訪問控制內部<% %>(代碼標籤)沒有這個作品的轉發器,但寫這裏面中繼器,它只是編譯錯誤不能轉發的ItemTemplate

<asp:Repeater runat="server" ID="rep1"> 
    <ItemTemplate> 
     <li> 
      <o:TextBox runat="server" ID="txtLastName" /> 
<% 
//this doesn't works outside of the repeater but here it doesn't 
txtName.Text = txtLastName.ClientID; 
%>        
      <o:TextBox runat="server" ID="txtName" /> 
     </li> 
    </ItemTemplate> 
</asp:Repeater> 

回答

3

您只能使用的DataBind語法的ItemTemplate <%# %>內。如果您想參考另一個控件,請使用NamingContainer

<asp:Repeater runat="server" ID="rep1"> 
    <ItemTemplate> 
     <li> 
      <o:TextBox runat="server" ID="txtLastName" /> 
      <%# Container.FindControl("txtLastName").ClientID %>  
      <o:TextBox runat="server" ID="txtName" /> 
     </li> 
    </ItemTemplate> 
</asp:Repeater> 

否則,您總是可以掛鉤ItemDataBound來操縱服務器端的控件。

protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{  
    if (e.Item.ItemType == ListItemType.Item 
       || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var txtLastName = e.Item.FindControl("txtLastName") as TextBox; 
     var txtName = e.Item.FindControl("txtName") as TextBox; 

     ... 
    } 
} 
+0

所以是有可能這樣做文本=「<%#txtLastName.ClientID%>」,我想和它不工作更新,以顯示你如何能做到這一點這樣 – Omu

+0

。 – TheCodeKing

+0

我刪除了'if ItemType'因爲它只適用於奇數項目 – Omu