【问题标题】:How can I detect the state of Content at View startup?如何在 View 启动时检测 Content 的状态?
【发布时间】:2019-06-23 03:27:48
【问题描述】:

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

我已经为 a) 案例做了类似的事情:

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

然后检查它是否为空,但看起来我的视图代码从未执行,相反我只是看到,“所选模板不存在演示项目。”

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

【问题讨论】:

    标签: dotnetnuke 2sxc


    【解决方案1】:

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

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

    【讨论】:

    • 所以我想这确实是一个功能请求。我怀疑您是否会将其视为高优先级,但似乎很明显,当视图与演示项目一起呈现时,该实体应该具有要检查的布尔 IsDemo() 属性或类似的东西。我意识到您的方式有效并且是一种解决方案,但它不直观并且容易随着时间的推移用户破坏事物。在代码中的某处,您选择输出演示项目而不是真实项目,似乎有一个简单的机会以某种方式对其进行标记。
    • 同意。请为此提出功能请求。
    • 请注意,github.com/2sic/2sxc/issues/1792 已通过广泛讨论进行了更新,请提供您的意见。
    【解决方案2】:

    2sxc 10.06 中添加的 IsDemoItem 属性

    Dynamic Entity

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 2017-12-27
        • 1970-01-01
        • 1970-01-01
        • 2016-07-23
        相关资源
        最近更新 更多