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

    Bu çalışmayı başaramıyorum ve nedenini anlayamıyorum.Bir ItemTemplate içinde Container.DataItem kullanımı

    <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> 
    

    Çok basit gibi gözüküyor, ama sadece bu hatayı alıyorum:

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

    Ben bütün gündür oldum ve asp bir CMS çalışan toplam Newbie. ASP'yi öğrenmek istemiyorum, sadece bu bir şeyi işe almak için.

    Eğer birisi bana doğru yönde işaret ederse çok minnettar olurdum.

    Teşekkürler!

    +0

    Asıl sorunuzun yanıtı yok ... 'Visible' özelliğini kullanmanın bir yolu var ama kimse 'if' ifadesini kullanarak bu çok önemli soruyu yanıtlamıyor. – Jaider

    cevap

    12

    Container.DataItem dışındaki veri bağlama ifadeleri <% # ...%> dışında kullanamazsınız.

    Ben böyle bir şey için kodunuzu değiştirmeniz (üzgünüm ama şu anda bunu test edemez) önermek:

    <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> 
    

    anahtarı "video dayalı iki denetim görünür özelliğini ayarlamaktır Veri dosyasının alan adı.

    de bu soruya bakın: ASP.Net conditional databinding

    1

    Oh, teşekkür ederim! Bu kesinlikle yardımcı oldu. Tamam, aslında içeride biraz daha fazla html'ye ihtiyacım var, bu yüzden beni işaret ettiğin yer tutucu tekniğini denedim.

    Yani, şimdi bu var: sadece ilki için olmalı geldiğimde neredeyse o video dosyası dışında çalışır

    <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> 
    

    hem örneklerinde görülebilir.

    Ben de bu çalıştı:

    <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> 
    

    Ama bu ikisi her zaman göstermek yaptı. Neredeyse orada gibi hissediyorum.

    Teşekkürler!

    0

    Oh, nevermind, anladım !!

    Bu nihayet çalıştı:

    <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> 
    

    çok SO size ederiz!

    +1

    Buna aldığınıza sevindim. Bir dahaki sefere, bir soru oluşturmak yerine orijinal sorunuzu düzenleyin. Burada böyle yapıldı. Ayrıca, FYI, çizgilerin çok uzun olmadığından emin olarak çirkin uzun kod bloklarını önleyebilirsiniz. Onları el ile sarın. –

    İlgili konular