在ItemTemplate中使用Container.DataItem的方法

5

我无法使其正常工作,也不知道原因。

<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:当前上下文中不存在名称“Container”

我一整天都在做这个,作为一个完全的新手,我正在使用ASP编写CMS。 我不想学ASP,只是想让这个东西工作。

如果有人能指点我正确的方向,我将非常感激。

谢谢!


没有答案回答你的原始问题... 使用属性 Visible 是一种方法,但是没有人使用 if 语句来回答这个非常重要的问题。 - Jaider
3个回答

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>

关键是根据数据项中的“Video File”字段设置两个控件的Visible属性。

另请参见此问题:ASP.Net条件数据绑定


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。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接