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

    Я не могу получить эту работу, и я не могу понять, почему.Использование Container.DataItem в 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> 
    

    Это кажется достаточно простым, но я просто получаю эту ошибку:

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

    Я был на этом в течение всего дня, и я полный новичок работает на 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> 
    

    Ключа установить Visible свойства двух элементов управления на основе «Видео File "элемента данных.

    Смотрите также вопрос: 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, вы можете избежать уродливых длинных блоков кода, убедившись, что линии не слишком длинны. Оберните их вручную. –

     Смежные вопросы

    • Нет связанных вопросов^_^