2010-04-15 49 views
1

我有一個Repeater控件,我想把未知數量的<asp:Hyperlink> S插入模板,例如,如果你開始這樣的:添加多個的<asp:超鏈接> S帶入中繼

<asp:Repeater runat="server" ID="PetsRepeater"> 
<ItemTemplate> 
    <%#DataBinder.Eval(Container.DataItem, "Owner")%> 
    <%#this.ListPets(Container.DataItem)%> 
    </ItemTemplate> 
</asp:Repeater> 

並在後面的代碼:

public partial class test1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      PetOwner p = new PetOwner() { 
       Owner = "Jimmy", 
       PetNames = new List<String>() { "Nemo", "Dory" } 
      }; 
      List<PetOwner> PetOwners = new List<PetOwner>() { p }; 
      PetsRepeater.DataSource = PetOwners; 
      PetsRepeater.DataBind(); 
     }   
    } 
    protected String ListPets(Object PetOwner) 
    { 
     StringBuilder sb = new StringBuilder(); 
     foreach (String Name in ((PetOwner)PetOwner).PetNames) 
     { 
      if (sb.Length > 0) sb.Append(", "); 
      sb.Append(Name);       
     } 
     return sb.ToString(); 
    } 
} 
class PetOwner 
{ 
    public String Owner; 
    public List<String> PetNames; 
} 

現在假設,而不必在我的中繼器串"Nemo, Dory",我想是這樣的:

<asp:HyperLink runat=server Text="Nemo" NavigateUrl="Pet.aspx?Name=Nemo" />, 
<asp:HyperLink runat=server Text="Dory" NavigateUrl="Pet.aspx?Name=Dory" /> 

我該怎麼做?我試着在aspx頁面內嵌一個foreach,但我得到錯誤Invalid expression term 'foreach'

+0

個人喜好(不確定一般指導等),但我*真*希望人們不會使用.Eval和<%#%>語法一般。數據綁定是一個代碼問題,當你可以很容易地使用ItemDataBound事件時,你爲什麼會把它放在標記中? – 2010-04-15 10:40:17

回答

1

如果你需要有一個asp:Hyperlink控件,而不僅僅是一個簡單的標籤,你應該使用一個嵌套的中繼器。 http://msdn.microsoft.com/en-us/library/aa478959.aspx

+0

是的!一旦你瞭解它,那麼容易。我甚至想過把另一個重複器放進去,但不知道如何綁定它。 「嵌套reperater」是神奇的話... – 2010-04-15 10:50:20