2009-12-11 106 views
0
<asp:Repeater ID="Repeater1" runat="server"> 

    <ItemTemplate> 
     <li class="closed" > 
      <asp:HyperLink runat="server" CssClass="toggler off" 
       ImageUrl="/_layouts/images/NEXT.GIF" 
       Text="<%#Container.DataItem%>" ID="HyperLink1"> 
      </asp:HyperLink> 
     </li> 
    </ItemTemplate> 

</asp:Repeater> 

我想從ArrayList中問題的超鏈接在Repeater控件

獲得超鏈接的文本在我的ascx代碼

我試圖做到這一點bt後其示值誤差

HyperLink hypl = (HyperLink)Repeater1.FindControl("HyperLink1"); 
hypl.Text = ar.ToString(); 
hypl.NavigateUrl = "http//www.yahoo.com"; 

任何人都有想法如何解決這個問題

+1

首先你得到了什麼異常?你有沒有選擇將你的數據源從arraylist更改爲列表< T> – Canavar 2009-12-11 18:26:21

+0

但是,如果我使用相同的(Repeater1.Datasource = AR; Repeater1.Databind())與ASP:超鏈接我得到這個錯誤 無法強制類型'System.Web.UI.LiteralControl'類型的對象鍵入' System.Web.UI.DataBoundLiteralControl' – TSSS22 2009-12-11 19:22:06

回答

3

有了中繼器控制,你不能使用FindControl按名稱查找超鏈接,因爲可以有多個(這是一個模板,並且它會呈現0到n次)。

您需要多次爲超鏈接指定值,每個綁定的項目一次。這是中繼器的ItemDataBound事件的工作。嘗試是這樣的:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> 
    <ItemTemplate> 
     <li class="closed" > 
     <asp:HyperLink runat="server" CssClass="toggler off" 
      ImageUrl="/_layouts/images/NEXT.GIF" 
      Text="<%#Container.DataItem%>" ID="HyperLink1"> 
     </asp:HyperLink> 
     </li> 
    </ItemTemplate> 
</asp:Repeater> 

然後,你需要處理的事件,像這樣:

所有的
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    HyperLink hypl = (HyperLink)e.Item.FindControl("HyperLink1"); 
    hypl.Text = ar.ToString(); 
    hypl.NavigateUrl = "http//www.yahoo.com"; 
} 
+0

優秀的答案。 – D3vtr0n 2009-12-11 21:06:48

+0

感謝斯蒂芬在我的情況下的答覆實際上我從字符串或arraylist中獲取大部分值不是直接從數據源中的列,所以我想在一個函數中執行所有的操作,否則其他數組或字符串將超出範圍。 當前我在做page_load() 和我在使用foeach(repaateritem item在repeater1.items){} – TSSS22 2009-12-11 21:13:44

+0

只需將數組存儲在頁面類的私有字段或屬性中。這樣一來,活頁夾事件就會在範圍內停留。 使用內置中繼器的機制很容易找到在頁面加載過程中完成所有操作的方法。您可以等到整個中繼器綁定後,然後一次走完中繼器的控制樹,但對於這種情況,這是很多不必要的工作。 – 2009-12-11 21:39:07