Asp.net 在Sitecore中,如何更改或设置页面模式

Asp.net 在Sitecore中,如何更改或设置页面模式,asp.net,sitecore,page-editor,Asp.net,Sitecore,Page Editor,在Sitecore中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想阻止EditMode完全脱离该用户的角色。这是基于分支模板的,所以我不能只是撤销每个页面的权限。我需要一些方法将Sitecore.Context.PageMode设置为正常 是否有用于设置页面模式的API?当我找不到C#API时,我确实发现我可以使用如下所示的URL重定向: if (!Sitecore.Context.PageMode.IsNormal && !IsAdminis

在Sitecore中,我有一些用户正在使用编辑功能区向页面添加内容。但是,有些页面我想阻止EditMode完全脱离该用户的角色。这是基于分支模板的,所以我不能只是撤销每个页面的权限。我需要一些方法将Sitecore.Context.PageMode设置为正常


是否有用于设置页面模式的API?

当我找不到C#API时,我确实发现我可以使用如下所示的URL重定向:

        if (!Sitecore.Context.PageMode.IsNormal && !IsAdministrator())
        {
            String id = Sitecore.Context.Item.ID.ToString();
            Response.Redirect("/?sc_mode=normal&sc_itemid=" + id + "&sc_lang=en"); 
        }

如果页面模式处于任何其他状态,这会将页面模式设置为正常。

您的重定向方法应该可以工作,但它也会关闭重定向后编辑器访问的其他页面的页面编辑器模式

您还可以检查页面是否处于编辑模式,用户是否属于某个角色,并且对于该(子)布局,显示标准的.NET控件,而不是Sitecore sc控件

Like <asp:Literal /> instead of <sc:Text />
Like而不是

我建议您创建规则并使用规则引擎,而不是将用户/硬编码重定向到特定页面。这将允许您重用代码,并通过内容编辑器更轻松地打开/关闭

已存在选择角色的条件:

/sitecore/system/Settings/Rules/Common/Conditions/Security/User Role
因此,您只需要创建一个操作来切换到正常模式。在操作中,可以调用以下代码:

Context.Site.SetDisplayMode(Sitecore.Sites.DisplayMode.Normal, Sitecore.Sites.DisplayModeDuration.ResetAfterRequest);
像wilsjd建议的那样用支票包装

规则引擎的一些信息(如果您不熟悉):


这是一个很好的观点。在我的例子中,这确实是我想要的,但我可以看出这对一些人来说可能是个问题。我非常喜欢SetDisplayMode,但是规则引擎在这个项目上不适合我。