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>
Était-ce utile?

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 %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top