【发布时间】:2012-05-28 04:35:56
【问题描述】:
我在 Umbraco 中有一个非常复杂的 razor 脚本,我想在其中的某个时间点渲染一个宏。
被称为 SuggestionBox 的宏实际上是一个用户控件 (.ascx),传统上这是在模板上使用
引用的<umbraco:macro Alias="SuggestionBox" language="cshtml" runat="server"></umbraco:macro>
但现在我需要从 razor 脚本中调用它,所以我尝试了;
@Html.Raw(umbraco.library.RenderMacroContent("SuggestionBox", Model.Id))
还有:
@RenderPage("SuggestionBox")
没有运气,因为我确定我用错了。
我在某处读到,如果页面包含在母版页中,这可能是不可行的。
如果我像往常一样将它添加到模板中,它会起作用:
<umbraco:macro Alias="EventsRenderer" language="cshtml" runat="server"></umbraco:macro>
<div class="talkingPointPanel">
<h3><umbraco:Item field="talkingPoinstSuggestionText" runat="server"></umbraco:Item></h3>
<umbraco:macro Alias="SuggestionBox" language="cshtml" runat="server"></umbraco:macro>
</div>
EventsRenderer 在哪里呈现理想情况下应该包含 SuggestionBox 的页面。
使用
@Html.Raw(umbraco.library.RenderMacroContent("<?UMBRACO_MACRO macroAlias=\"SuggestionBox\" />", Model.Id))
给我这个错误:
<!-- Error generating macroContent: 'System.Web.HttpException (0x80004005): HtmlForm cannot render without a reference to the Page instance. Make sure your form has been added to the control tree.
at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at umbraco.presentation.templateControls.Macro.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at umbraco.library.RenderMacroContent(String Text, Int32 PageId)' -->
有什么想法吗?
【问题讨论】:
-
我没有尝试在 Razor 中使用 .Net 控件(仅在 razor 中使用 razor)并创造了奇迹。 @RenderPage("~/macroscripts/dotMailerMessageBox.cshtml") 即使它不适合你,它可能对其他人有用..
标签: razor macros render umbraco