2010-09-28 7 views
1

Je suis en train d'exécuter le code suivant dans une page .aspx:ASP.NET répéteur Eval

<asp:Repeater ID="rptComentarios" runat="server"> 
      <ItemTemplate> 
       <% if (Convert.ToInt32(Eval("int_tipo")) == 1) 
        { %> 
             <div class="resp"> 
      <div class="top"> 
      </div> 
      <div class="cont-resp"> 
       <h3> 
        <%# Eval("txt_nome") %></h3> 
       <p> 
       <%# Eval("txt_comentario") %></p> 
      </div> 
     </div> 
        <% } 
        else 
        {%> 
           <div class="usuario"> 
      <div class="top"> 
      </div> 
      <div class="cont-usuario"> 
       <h3> 
         <%# Eval("txt_nome") %></h3> 
       <p> 
        <%# Eval("txt_comentario") %></p> 
      </div> 
     </div> 
        <% } %> 
      </ItemTemplate> 
      </asp:Repeater> 

Il lance une exception d'exécution dans la première ligne:

<% if (Convert.ToInt32(Eval("int_tipo")) == 1) 

System.InvalidOperationException: Les méthodes de liaison de données telles que Eval(), XPath() et Bind() ne peuvent être utilisées que dans le contexte d'un contrôle de base de données.

Qu'est-ce qui ne va pas? Des idées?

Répondre

0

Je pense qu'il faut être un signe # pour l'enceinte <%# ..Eval...%>

Ou essayez la version complète Eval

<%# if (Convert.ToInt32(DataBinder.Eval(Container.DataItem, "int_tipo")) 
                    == 1) { %> 
+0

oui je pense, mais je ne peux pas insérer « # » dans cette ligne – ozsenegal

+4

son mal ne peut pas utiliser « # » dans les cas/clauses d'autre – ozsenegal

+0

'if' ne peuvent pas être utilisés à l'intérieur' '<%# ... %> cette réponse est tout simplement faux . La raison pour laquelle les gens ont voté dessus est un mystère pour moi ... – Jakub

5

J'ai eu un problème similaire et le code suivant a fonctionné pour moi:

<asp:Repeater ID="rptComentarios" runat="server"> 
    <ItemTemplate> 

    <asp:PlaceHolder ID="placeholderBlaBlaBla" runat="server" Visible='<%# Convert.ToInt32(Eval("int_tipo")) == 1 %>'> 
     Your optional HTML 
    </asp:placeholder> 

    Other HTML 

    </ItemTemplate> 
</asp:Repeater> 

Quelques autres commentaires:

Veuillez noter que les guillemets simples sont utilisés pour définir la valeur Visible attribut de asp:placeholder. J'ai aussi essayé les guillemets doubles et ils n'ont pas fonctionné.

Chaque fois que vous voulez obtenir du code HTML affiché en option, vous devez utiliser un contrôle pour l'afficher/masquer. asp:placeholder fonctionne bien à cet effet. Ne faites jamais <% if(..) { %> - c'est le mal.

<%# ... %> est utilisé pour calculer ou afficher des expressions à l'intérieur d'un répéteur. Ces expressions peuvent être affichées en HTML ou transmises en tant qu'attributs des contrôles côté serveur. Vous ne pouvez pas utiliser if à l'intérieur.

Questions connexes