12. oktober 2006 - 11:11
Der er
5 kommentarer og 1 løsning
Brug Eval til at sætte Class
Hej, prøvet at printe en menu ud med følgende kode: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="False" /> <ul> <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SiteMapDataSource1"> <ItemTemplate><li><% if (Request.Url.PathAndQuery.StartsWith((string)Eval("url"))) { %><a href="<%#Eval("url")%>" class="active"><%#Eval("title")%></a><% } else { %><a href="<%#Eval("url")%>"><%#Eval("title")%></a><% } %></li></ItemTemplate> </asp:Repeater> </ul> Men får fejl i min if sætning: Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control. Hvordan løser jeg dette smartest?
Annonceindlæg fra Computerworld it-jobbank
12. oktober 2006 - 12:27
#3
Som udgangspunkt synes jeg ikke du skal have kode som den du viser liggende flettet ind i din repeater på den måde. Du kan gøre det at du abbonnere på det event der hedder ItemDataBound på repeateren, og der skrive i ren C# hvad der skal ske. <asp:Repeater ID="someRepeater" runat="server" OnItemDataBound="someRepeater_ItemDataBound" > <ItemTemplate> <asp:HyperLink CssClass="defaultStyle" NavigateUrl='<%# Eval("Url") %>'></asp:HyperLink> </ItemTemplate> </asp:Repeater> Og så handleren til databound eventet: protected void someRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType = ListItemType.Item || e.Item.ItemType = ListItemType.AlternatingItem) { HyperLink hl = e.Item.FindControl("link") as HyperLink; hl.CssClass = "active"; } } Kan du ikke bruge hverken menukontrollen eller et treeview til noget? Mvh