Использование Container.DataItem в ItemTemplate - PullRequest
5 голосов
/ 17 апреля 2009

Я не могу заставить это работать, и я не могу понять, почему.

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

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

Сообщение об ошибке компилятора: CS0103: The имя «Контейнер» не существует в текущий контекст

Я был на этом весь день, и я совершенно новичок, работающий над CMS в asp. Я действительно не хочу изучать ASP, просто чтобы заставить это работать.

Если бы кто-нибудь мог указать мне правильное направление, я был бы очень очень благодарен.

Спасибо!

Ответы [ 3 ]

12 голосов
/ 17 апреля 2009

Вы не можете использовать 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 двух элементов управления на основе поля «Видеофайл» элемента данных.

См. Также этот вопрос: ASP.Net условная привязка данных

1 голос
/ 17 апреля 2009

О, спасибо! Это определенно помогло. Итак, мне действительно нужно больше 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 голосов
/ 17 апреля 2009

О, не важно, я понял !!

Это сработало окончательно:

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

Спасибо ТАК много!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...