1

使用 Orchard CMS 上的管理面板,我创建了以下内容:

  1. 一种名为 CalendarEvent 的内容类型,它包含多个字段,包括 EventDate;
  2. 具有 2 个过滤器的查询,一个按内容类型 (= CalendarEvent),另一个按事件日期。布局上的显示模式设置为属性;
  3. 单击菜单项时显示查询的投影。

问题是基于 EventDate 我们只显示即将发生的事件,而不是过去的事件。如果由于某种原因没有要显示的事件,用户得到的只是一个没有任何信息的空白页面。

我的问题是,如何修改我的查询或投影以显示如下内容:“没有安排当前事件”?

我知道查询布局上的属性允许我指定“无结果”,但这意味着存在记录并且实际属性为空。但是,在我的示例中,不存在任何记录。

谢谢大家。

拉斐尔

顺便说一句,我使用的是最新的 Orchard 版本 1.6。

4

2 回答 2

0

我所做的是创建一个形状并将其用作我的查询中的视图。然后该形状将有一个 if 语句来检查查询返回是否给出任何结果。

例子:

@using Orchard.ContentManagement
@using Orchard.Utility.Extensions

@{
    var dealsTerms = ((IEnumerable<ContentItem>)Model.ContentItems).ToList();
}
@if (dealsTerms.Any() )
{
    <div>
        @foreach (var dealTerm in dealsTerms)
        {
            var contentManager = dealTerm.ContentManager;
            <div>
                @Display(contentManager.BuildDisplay(dealTerm, "Summary"))
            </div>
        }
    </div>
}
else
{
   <p>No deals found</p>
}

我用这篇文章作为参考: http ://www.ideliverable.com/blog/ways-to-render-lists-of-things

祝你好运

于 2017-06-14T12:51:30.083 回答
0

如果您的投影是 Layouts 元素,您可以在主题的 Views/Elements 文件夹中创建一个 Projection.cshtml 文件,其中包含以下内容:

@{
    var list = Model.List;
    var pager = Model.Pager;

    if (list != null)
    {
        @Display(list)

        if (list.Items.Count == 0)
        {
            <div>There are currently no items.</div>
        }
    }

    if (pager != null)
    {
        @Display(pager)
    }
}

这是添加了部分的默认模板的副本if (list.Items.Count == 0)。根据需要进行编辑。

于 2020-06-02T02:01:53.413 回答