ListView布局模板在ASP.NET中为空时不显示

6
我有一个<asp:ListView>,但是当列表为空时,<LayoutTemplate>部分不显示,虽然<EmptyDataTemplate>部分会显示。LayoutTemplate包含表的标题,我想在数据源中没有项目时显示一个空表格,而不仅仅是EmptyDataTemplate的内容。
如果没有选择,我将把LayoutTemplate复制到EmptyDataTemplate中,但这似乎很愚蠢。有什么好主意吗?
4个回答

14

根据MSDN中的说明:

当绑定到ListView控件的数据源不包含任何记录且InsertItemPosition属性设置为InsertItemPosition.None时,空模板将在控件中显示。此时呈现空模板而非LayoutTemplate模板。如果InsertItemPosition属性设置为InsertItemPosition.None以外的值,则EmptyDataTemplate模板不会呈现。

这里的关键词是“...呈现空模板而非LayoutTemplate模板...”

因此,我认为您需要将LayoutTemplate复制到EmptyDataTemplate模板中。


7
确实。对于以ListView方式呈现其行的表格,我只是将标题标签放在ListView之外,并且LayoutTemplate现在只包含ItemPlaceholder。 - Graham

0

我刚刚解决了一个问题,当你有InsertItemTemplate和EmptyDataTemplate时。 根据微软文档的说法,这是不允许同时存在的。因此,我决定在InsertItemTemplate中创建一个新的。 您可以在此处预览我的示例代码。

   <InsertItemTemplate>
        <% if (CheckEmptyTable())
            { %>
              <tr> 
                 <td colspan="6">No data founds。</td>
              </tr>
        <% } %>
         // Your insert template input here 
        <tr style="">
          
        </tr>
    </InsertItemTemplate>

我的结果图像: 在此输入图片描述


0
在一个非常简单的方式中,您可以同时获取标题和一条消息,说明没有数据。
您可以按照以下思路制作您的“LayoutTemplate”:
<LayoutTemplate>
  <table>
    <tr>
      <td>a header</td>
      <td>another header</td>
      <td>third header</td>
    </tr>
    <tr runat="server" id="itemPlaceholder">
      <td colspan="3"
        There is no data!
      </td>
    </tr>
  </table>
</LayoutTemplate>

请注意,占位符(由id="itemPlaceholder"标记)的tr实际上包含了一些内容。当没有数据时,它包含了应该显示的内容。然后,在代码后台,您将<EmptyTemplate>设置为等于<LayoutTemplate>(这样您只需要维护一个这样的模板)。我是这样做的:
Private Sub lvwThings_Init(sender As Object, e As EventArgs) Handles lvwThings.Init
    lvwThings.EmptyDataTemplate = lvwThings.LayoutTemplate
End Sub

逻辑如下:
当存在数据时,即使用实际的<LayoutTemplate>时,整个<tr runat="server" id="itemPlaceholder">,以及它包含的td和文本将被<ItemTemplate>替换。
但是,当没有数据时,即使用<EmptyTemplate>(而不是<LayoutTemplate>)时,<EmptyTemplate>内部的所有内容都不会被替换,因此所有内容都会按原样显示。

0

你也可以将你的代码放入一个用户控件 (.acsx) 中。然后在布局模板和空模板中包含它...这样它会感觉不那么愚蠢,因为你仍然可以在一个地方管理它。我知道你对复制相同的代码的感觉...好像是五年级学生才会做的事情。使用控件是一种更成熟的方法。


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