2010-04-15 45 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