c#
  • asp.net
  • data-binding
  • 2009-04-16 7 views 5 likes 
    5

    Je n'arrive pas à obtenir ce fonctionnement et je n'arrive pas à comprendre pourquoi.Utilisation de Container.DataItem dans un ItemTemplate

    <ItemTemplate> 
    <% if (Field(((DataRowView)(Container.DataItem)), "Video File") != "") { %> 
    <a href='upload/images/<%# Field(((DataRowView)(Container.DataItem)), "Video File")%>'>Download Link</a> 
    <% } else { %> 
    <embed height="14" width="661" name="plugin" src="<%# ContentUploadURL%>/<%# Field(((DataRowView)(Container.DataItem)), "Audio File")%>" type="audio/mpeg" autostart="false" /> 
    <% } %> 
    </ItemTemplate> 
    

    Il semble assez simple, mais je reçois juste cette erreur:

    Compiler Error Message: CS0103: The name 'Container' does not exist in the current context

    Je suis à ce jour et je suis un débutant travaillant sur un CMS en asp. Je ne veux pas vraiment apprendre l'ASP, juste pour que ça fonctionne.

    Si quelqu'un pouvait me diriger dans la bonne direction, je serais très très reconnaissant.

    Merci!

    +0

    Il n'y a pas de réponse à votre question initiale ... utilisez la propriété 'Visible' est un moyen de contourner mais personne ne répond à ce problème très important en utilisant l'instruction' if'. – Jaider

    Répondre

    12

    Vous ne pouvez pas utiliser Container.DataItem en dehors des expressions de liaison de données <% # ...%>.

    Je vous suggère de changer votre code à quelque chose comme ça (désolé mais je ne peux pas tester actuellement):

    <ItemTemplate> 
        <asp:HyperLink runat="server" 
        Visible='<%# Eval("Video File") != "" %>' 
        NavigateUrl='<%# Eval("Video File")' Text="Download Link" /> 
    
        <embed runat="server" Visible='<%# Eval("Video File") == "" %>' 
        height="14" width="661" name="plugin" 
        src="<%# ContentUploadURL%>/<%# Field(((DataRowView)(Container.DataItem)), "Audio File")%>" 
        type="audio/mpeg" autostart="false" /> 
    </ItemTemplate> 
    

    La clé est de définir la propriété visible des deux contrôles basés sur la « vidéo Fichier "champ de l'élément de données.

    Voir aussi cette question: ASP.Net conditional databinding

    1

    Oh, merci! Cela a certainement aidé. Ok, j'ai donc besoin de plus de html à l'intérieur, donc j'ai essayé la technique de placement que vous m'avez indiquée.

    Alors, je maintenant:

    <asp:PlaceHolder id="PlaceHolder1" runat="server" Visible='<%# Eval("Video File") != "" %>'> 
    Video Stuff 
    </asp:PlaceHolder> 
    
    <asp:PlaceHolder id="PlaceHolder2" runat="server" Visible='<%# Eval("Video File") == "" %>'> 
    Audio Stuff 
    </asp:PlaceHolder> 
    

    Il fonctionne presque, sauf que le fichier vidéo est visible sur les deux cas où il ne devrait être pour la première.

    J'ai aussi essayé ceci:

    <asp:PlaceHolder id="PlaceHolder1" runat="server" Visible='<%# Eval("Video File") != "" %>'> 
        Video Stuff 
        </asp:PlaceHolder> 
    
    <asp:PlaceHolder id="PlaceHolder2" runat="server" Visible='<%# Eval("Audio File") != "" %>'> 
        Audio Stuff 
        </asp:PlaceHolder> 
    

    Mais cela fait deux montrent tout le temps. Je me sens comme c'est presque là.

    Merci!

    0

    Oh, rien, je l'ai eu !!

    Cela a finalement:

    <asp:PlaceHolder id="PlaceHolder1" runat="server" 
        Visible='<%# Field(((DataRowView)(Container.DataItem)), "Video File") != "" %>'> 
        Video Stuff 
        </asp:PlaceHolder> 
    
        <asp:PlaceHolder id="PlaceHolder2" runat="server" 
        Visible='<%# Field(((DataRowView)(Container.DataItem)), "Video File") == "" %>'> 
        Audio Stuff 
        </asp:PlaceHolder> 
    

    Merci SO beaucoup!

    +1

    Je suis content que vous l'ayez eu. La prochaine fois, éditez votre question originale au lieu de créer une réponse. Voilà comment c'est fait ici. Aussi, FYI, vous pouvez éviter les longs blocs de code laids en vous assurant que les lignes ne sont pas trop longues. Enveloppez-les à la main. –

    Questions connexes