Pourquoi ne fonctionnera pas DataBinder.Eval
-
27-09-2019 - |
Question
Je suis en train de créer un système de menu simple à l'aide de répéteurs. Dans le système que je veux utiliser une autre mise en forme pour les éléments de sous-classe et essaie d'utiliser un Si qui vérifie les résultats et les branches DataBinders si ses « classes » mais quand je compile le code est dit:
Nom « conteneur » non déclaré.
Sur tous les tutoriels en ligne et MSDN le Container.DataItem est simplement supposé travailler donc je ne peux trouver aucune information sur elle ne fonctionne pas. Quelqu'un peut-il qui utilise databinders plus que moi vous expliquer cela?
<asp:Repeater ID="TopNavRepeat" runat="server" DataSourceID="SqlDataSource1" >
<HeaderTemplate>
<ul id="nav">
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HiddenField ID="LinkIdField1" Value='<%# Eval("id") %>' runat="server"
OnDataBinding="LinkIdField_ValueChanged" OnValueChanged="LinkIdField_ValueChanged"/>
<asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("Url") %>'
ToolTip='<%# Eval("Description") %>'>
</asp:HyperLink>
<ul>
<!-- -->
<% If (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes")THEN %>
<asp:Repeater ID="ClassDownList" runat="server" DataSourceID="ClassDS">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("name") %>' NavigateUrl='<%# "/Class/" & helpers.urlSafe(CStr(Eval("name"))) %>'
ToolTip='<%# CStr(Eval("name")) & " home page" %>' /></li>
</ItemTemplate>
<FooterTemplate></FooterTemplate>
</asp:Repeater>
<% Else %>
<asp:Repeater ID="DropDownList" runat="server" OnLoad="ChildDataList_Init">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("Url") %>'
ToolTip='<%# Eval("Description") %>' /></li>
</ItemTemplate>
<FooterTemplate></FooterTemplate>
</asp:Repeater>
<%End If %>
</ul>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
La solution
Je pense que u ne peut pas utiliser <% If %>
dans un répéteur
qui se trouve juste .Visible=False
à l'un d'entre eux sur le côté serveur
ou essayer (pas sûr si cela fonctionne)
<asp:Repeater Visible='<%# (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes") %>'>
Autres conseils
Je ne suis pas un gars de VB, mais est-ce parce que vous faites une cession, plutôt qu'une comparaison?
<%# If (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes")THEN %>
Faut-il pas:
<%# If (CStr(DataBinder.Eval(Container.DataItem, "Title")) == "Classes")THEN %>