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

    Non riesco a farlo funzionare e non riesco a capire perché.Uso di Container.DataItem in 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> 
    

    Sembra abbastanza semplice, ma ho appena ottenere questo errore:

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

    Sono stato in questo tutto il giorno e io sono un newbie totale a lavorare su un CMS in ASP. Non voglio davvero imparare ASP, solo per far funzionare questa cosa.

    Se qualcuno potesse indicarmi la giusta direzione, sarei molto grato.

    Grazie!

    +0

    Non c'è risposta alla tua domanda originale ... usa la proprietà 'Visibile' è un modo per aggirare ma nessuno risponde a questo problema molto importante usando l'istruzione' if'. – Jaider

    risposta

    12

    Non è possibile utilizzare Container.DataItem all'esterno delle espressioni di associazione dati <% # ...%>.

    ti suggerisco di cambiare il codice per qualcosa di simile (scusate ma non posso provarlo attualmente):

    <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 chiave è quello di impostare la proprietà Visible dei due controlli sulla base del "Video File "campo dell'elemento dati.

    Vedi anche questa domanda: ASP.Net conditional databinding

    1

    Oh, grazie! Ciò ha sicuramente aiutato. Ok, quindi ho bisogno di un po 'di html all'interno, quindi ho provato la tecnica dei segnaposti che mi hai indicato.

    Così, ho questo ora:

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

    Funziona quasi salvo che file video è visibile su entrambi i casi in cui si dovrebbe essere solo per il primo.

    Ho anche provato questo:

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

    ma che ha reso entrambi mostrano tutto il tempo. Mi sembra che sia quasi arrivato.

    Grazie!

    0

    Oh, non importa, ho capito !!

    Questo lavorato infine:

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

    Grazie SO tanto!

    +1

    Felice di averlo capito. La prossima volta modifica la tua domanda originale invece di creare una risposta. Ecco come si fa qui. Inoltre, FYI, puoi evitare i brutti blocchi di codice lungo assicurandoti che le linee non siano troppo lunghe. Avvolgili a mano. –

     Problemi correlati

    • Nessun problema correlato^_^