1

是否可以在 Umbraco 中创建一个继承主 Umbraco 母版页的普通 Web 表单页面?

我的客户需要一些复杂的功能,这些功能需要在 CMS 上下文之外的页面中完成。

我想知道是否可以从“正常”页面的构造函数中手动启动 Umbraco 上下文。目前我只是得到错误:

引发了“System.Web.HttpUnhandledException”类型的异常。---> System.NullReferenceException:对象引用未设置为对象的实例。在 umbraco.item..ctor(IDictionary 元素,IDictionary 属性) 在 umbraco.presentation.templateControls.ItemRenderer.GetFieldContents(Item item) 在 umbraco.presentation.templateControls.ItemRenderer.ParseMacros(Item item) 在 umbraco.presentation.templateControls.Item .OnInit(EventArgs e) 在 System.Web.UI.Control.InitRecursive(控制命名容器) 在 System.Web.UI.Control.InitRecursive(控制命名容器) 在

谢谢克里斯

4

3 回答 3

2

您可以使用备用模板直接引用模板,而无需关联内容页面。

您可以通过以下方式引用它:

http://www.yourdomain.com/page.aspx?altTemplate=templatename

http://www.yourdomain.com/page/templatename.aspx

这将阻止用户删除节点。

这有帮助吗?

于 2013-01-16T17:26:57.730 回答
1

您可以从 umbraco 母版页继承,像这样手动指定您的母版页

MasterPageFile="../masterpages/umbracoPage.Master"

这适用于.aspx您在plugin directory

于 2013-01-16T10:40:54.067 回答
1

我认为您可以实现您的要求;

使页面脱离 Umbraco 控制的常用方法是使用 web.config 键 umbracoReservedUrls 和 umbracoReservedPaths - 这些是随 4.11.1 安装的键:

<add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/VSEnterpriseHelper.axd" />
<add key="umbracoReservedPaths" value="~/umbraco,~/install/" />

其次,如果您的顶级母版页不包含 umbraco 项目或宏或任何内容,您可以在 Page PreInit 事件期间始终切换到母版页

protected void Page_PreInit(Object sender, EventArgs e)
{
    this.MasterPageFile = "/umbraco/masterpages/default.master";
}

或者您可以使用@BeaverProj 概述的技术。

编辑

看着你的评论,我认为你可以在不进入 umbraco '上下文'的情况下获得 umbraco 数据。添加对 cms.dll 和 businesslogic.dll 的项目引用(umbraco 会将它们放在 bin 中),然后您可以在没有包装控件的情况下使用 umbraco 框架。例如内部editMacro.aspx页面直接使用框架:

                <asp:DropDownList OnPreRender="AddChooseList" runat="server" ID="macroPropertyType"
                    DataTextFormatString="" DataTextField='macroPropertyTypeAlias' DataValueField="id"
                    DataSource='<%# GetMacroPropertyTypes()%>' SelectedValue='<%# ((umbraco.cms.businesslogic.macro.MacroPropertyType) DataBinder.Eval(Container.DataItem,"Type")).Id %>'>
                </asp:DropDownList>
于 2013-01-17T09:33:51.463 回答