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

时间:2019-06-23 03:27:48

标签: dotnetnuke 2sxc

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

对于a)情况,我已经做了类似的事情:

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

然后检查它是否为null,但似乎我的View代码从不执行,相反,我只是看到“所选模板不存在演示项目。”

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

3 个答案:

答案 0 :(得分:0)

如果没有演示项目,则模板系统不会渲染模板(除非它是没有内容类型的模板)。 有需要时,我们有两种方法

  1. 在其中一个字段中为演示项目提供唯一值,然后在模板中检查该值
  2. 检查GUID上的演示项目ID,然后检查该(Content.EntityGuid == ...)

答案 1 :(得分:0)

在2sxc 10.06中添加了IsDemoItem属性

Dynamic Entity

答案 2 :(得分:0)

如果内容编辑器“隐藏”了唯一的内容项,则匿名用户将看到该项目所在的演示项。从内容编辑器(以及公共/匿名用户)的角度来看,这是令人困惑和意外的。如果其他任何人都可以运行,这里是添加到视图开始的简单代码段。基本上,如果当前用户未登录并且要显示的项目是演示项目,请退出不显示任何内容的视图。

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

最好将其放在第一个@ {} Razor区块开始处。

注意:在10.6.x之前的版本中,这不会在2sxc中引发错误(由于“ ?? false”),但也将不起作用。