在ItemTemplate中使用Container.DataItem

时间:2009-04-16 23:15:14

标签: c# asp.net data-binding

我无法让这个工作,我无法弄清楚为什么。

<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:   名称'容器'不存在于   当前背景

我整天都在这里,而且我是一名在asp上使用CMS的新手。我真的不想学习ASP,只是为了让这一件事有用。

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

谢谢!

3 个答案:

答案 0 :(得分:12)

您不能在数据绑定表达式&lt;%#...%&gt;之外使用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 conditional databinding

答案 1 :(得分: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>

但这使得两者都显示出来。我觉得它几乎就在那里。

谢谢!

答案 2 :(得分: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