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

    私はこれを行うことができず、理由を理解できません。ItemTemplateでのContainer.DataItemの使用

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

    それは十分に単純なようだが、私はこのエラーを取得する:

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

    私はこれを一日中してきたと私はASPでCMSに取り組んで合計初心者です。私はASPを学びたいとは思っていません。

    誰かが私を正しい方向に向けることができれば、とても感謝しています。

    ありがとうございます!

    +0

    あなたの元の質問には答えがありません。「Visible」というプロパティを使用していますが、誰かがこの非常に重要な問題に 'if'ステートメントを使って答えています。 – Jaider

    答えて

    12

    データバインディング式<%#...%>の外側でContainer.DataItemを使用することはできません。

    は、私はあなたがこのような何かにあなたのコードを変更する(申し訳ありませんが、私は現在、それをテストすることはできません)お勧め:

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

    キーは「ビデオに基づく2つのコントロールのVisibleプロパティを設定することですデータ項目の「ファイル」フィールドに表示されます。

    も参照してくださいこの質問:ASP.Net conditional databinding

    1

    ああ、ありがとうございました!それは間違いなく助けになりました。さて、私は実際にいくつかのHTMLの内部が必要なので、私が指摘したプレースホルダーのテクニックを試しました。

    だから、私は今、これを持っている:それは最初の一つだけのためにあるべきときには、ほぼそのビデオファイルを除いて動作します

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

    は、両方のインスタンス上に表示されています。

    また、私はこの試みた:

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

    をしかし、それはすべての時間を示して両方作りました。私はほとんどそこにいるように感じる。

    ありがとうございます!

    0

    ああ、気にしない、私はそれを持っている!

    これは最終的に働いた:

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

    はあなたにSO多くをありがとうございました!

    +1

    嬉しいです。次回は、答えを作成するのではなく、元の質問を編集してください。それがここで終わったのです。また、FYIでは、行が長すぎないことを確認することで、醜い長いコードブロックを避けることができます。手で包みます。 –

    関連する問題