C# 创建一个";“正常”;依赖于Umbraco母版页的ASP.NET页

C# 创建一个";“正常”;依赖于Umbraco母版页的ASP.NET页,c#,asp.net,umbraco,C#,Asp.net,Umbraco,在Umbraco中是否可以创建一个继承Umbraco主页面的普通webforms页面 我的客户需要在CMS上下文之外的页面中完成一些复杂的功能 我想知道是否可以从“普通”页面的构造函数中手动启动Umbraco上下文。目前,我只是得到了一个错误: 引发了类型为“System.Web.HttpUnhandledException”的异常。--> System.NullReferenceException:对象引用未设置为实例 指一个物体。在umbraco.item..ctor(IDictionary

在Umbraco中是否可以创建一个继承Umbraco主页面的普通webforms页面

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

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

引发了类型为“System.Web.HttpUnhandledException”的异常。--> System.NullReferenceException:对象引用未设置为实例 指一个物体。在umbraco.item..ctor(IDictionary元素,IDictionary 属性)在 umbraco.presentation.templateControls.ItemRenderer.GetFieldContents(项目 项目)在 umbraco.presentation.templateControls.ItemRenderer.ParseMacros(项目 项目)在umbraco.presentation.templateControls.item.OnInit(EventArgs e) 位于System.Web.UI.Control.InitRecursive(Control namingContainer)的 System.Web.UI.Control.InitRecursive(Control namingContainer)位于

谢谢
Kris

U可以从umbraco母版页继承,手动指定母版页,如下所示

MasterPageFile=“../masterpages/umbracope.Master”


这适用于
.aspx
页面,您在
插件目录中指定此页面

您可以从umbraco母版页继承,手动指定母版页,如下所示

MasterPageFile=“../masterpages/umbracope.Master”


这适用于
.aspx
页面,您在
插件目录中指定此页面

您可以使用替代模板直接引用模板,而无需将内容页与之关联

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

这将阻止用户删除节点


这有帮助吗?

您可以使用替代模板直接引用模板,而无需关联内容页

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

这将阻止用户删除节点


这有帮助吗?

我认为你可以实现你的要求

使页面脱离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/" />
或者您可以使用@BeaverProj概述的技术

编辑

查看您的评论,我认为您可以在不了解umbraco“上下文”的情况下获取umbraco数据。将项目引用添加到cms.dll和businesslogic.dll(umbraco会将它们放在bin中),然后您就可以使用umbraco框架而无需包装器控件。例如,internal 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>

我认为你可以达到你的要求

使页面脱离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/" />
或者您可以使用@BeaverProj概述的技术

编辑

查看您的评论,我认为您可以在不了解umbraco“上下文”的情况下获取umbraco数据。将项目引用添加到cms.dll和businesslogic.dll(umbraco会将它们放在bin中),然后您就可以使用umbraco框架而无需包装器控件。例如,internal 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>


您是否无法使用放置在特定页面上的用户控件执行功能?当然可以,但这会导致用户删除CMS内的主机页。问题是,你最终会用非CMS页面阻塞CMS。另一个问题是,你无法“编写”CMS资产的创建,因此,当功能部署的开销依赖于手动配置时,这需要时间并且容易出错。如果我可以把CMS的内容完全排除在外,那么像这样的内容就容易多了。我想我可以创建一个单独的非Umbraco母版页。但并不理想。您是否无法使用放置在特定页面上的用户控件执行功能?当然可以,但这会导致用户删除CMS内的主机页。问题是,你最终会用非CMS页面阻塞CMS。另一个问题是,你无法“编写”CMS资产的创建,因此,当功能部署的开销依赖于手动配置时,这需要时间并且容易出错。如果我可以把CMS的内容完全排除在外,那么像这样的内容就容易多了。我想我可以创建一个单独的非Umbraco母版页。不太理想,谢谢你。不幸的是,我的母版页确实包含Umbraco项目。我决定创建一个单独的非Umbraco母版页,它在很大程度上复制了Umbraco母版页。我不想复制功能,但似乎没有其他方法。(我想也许可以创建一个“假”Umbraco上下文,使Umbraco母版页能够在正常页面下工作)。谢谢,我想你可以(现在我想起来了),因为翁布拉科已经做到了。请参阅编辑。谢谢。不幸的是,我的母版页确实包含Umbraco项目。我决定创建一个单独的非Umbraco母版页,它在很大程度上复制了Umbraco母版页。我不想复制功能,但似乎没有其他方法。(我想也许可以创建一个“假”Umbraco上下文,使Umbraco母版页能够在正常页面下工作)。谢谢,我想你可以(现在我想起来了),因为翁布拉科已经做到了。请参见编辑。