在Orchard CMS上,如何在查询未返回投影记录时显示消息

时间:2013-04-08 13:23:44

标签: orchardcms projection orchardcms-1.6

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

  1. 一种名为CalendarEvent的内容类型,它包含几个字段,包括EventDate;
  2. 具有2个过滤器的查询,一个按内容类型(= CalendarEvent),另一个基于事件的日期。布局上的显示模式设置为属性;
  3. 单击菜单项时显示查询的投影。
  4. 问题在于,基于EventDate,我们只显示即将发生的事件,而不是过去的事件。如果由于某种原因没有要显示的事件,则所有用户获取的是一个没有任何信息的空白页面。

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

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

    提前谢谢大家。

    圣拉斐尔

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

2 个答案:

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

祝你好运

答案 1 :(得分: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)部分。根据需要进行编辑。