如何在 View 启动时检测 Content 的状态?

How can I detect the state of Content at View startup?

假设我已经为 Link 内容类型创建了自己的自定义视图。当用户将 2sxc 内容应用程序添加到窗格,然后选择内容类型 (Link) 然后我的自定义视图时,当它第一次启动时,我如何检测到 a) 视图不使用演示项vs. b) 视图使用演示项目并显示演示项目 vs. c) 这不是第一次并且有真实用户添加的内容(实体)到位?

我已经为 a) 案例做了这样的事情:

var link = AsDynamic(Data["Default"]).First();

然后检查它是否为空,但看起来我的视图代码从未执行过,相反我只是看到,"No demo item exists for the selected template."

如果我确实分配了一个演示,是否有更优雅的方式来知道我作为 Content.First() 或 Data["Default"]).First() 的实体是演示项目和现在用户创建的实体?目前,我正在对模板中的 EntityId 进行硬编码并对其进行测试。

如果没有演示项,模板系统不会呈现模板(除非它是没有 content-type 的模板)。 当我们需要这个的时候,我们有两种方式

  1. 在其中一个字段中为演示项指定一个唯一值,并在模板中检查该值
  2. 检查 GUID 上的 demo-item ID 并检查 (Content.EntityGuid == ...)

IsDemoItem 属性 添加到 2sxc 10.06

Dynamic Entity

如果内容编辑器 "Hides" 是唯一的内容项,则匿名用户将在该项目所在的位置看到一个演示项。从内容编辑者(以及 public/anonymous 用户)的角度来看,这是令人困惑和意外的。如果有人遇到它,这里是添加到视图开头的简单代码片段。基本上,如果当前用户未登录且要显示的项目是演示项目,则退出显示任何内容的视图 w/o。

  if(!Request.IsAuthenticated) {
    if(Content.IsDemoItem ?? false) {
      return;
    }
  }

最好将它放在第一个 @{} Razor 块的开头附近。

注意:这不会在 10 之前的 2sxc 中抛出错误。6.x(因为“?? false”),但它也不起作用。