我有一个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'
。
个人喜好(不确定一般指导等),但我*真*希望人们不会使用.Eval和<%#%>语法一般。数据绑定是一个代码问题,当你可以很容易地使用ItemDataBound事件时,你为什么会把它放在标记中? – 2010-04-15 10:40:17