У меня есть скрипт бритвы в Umbraco, который довольно сложный, и я хочу, чтобы в какой-то момент он отображал в нем макрос.Umbraco - Render .Net User Control (ascx) macro with Razor
Макрос, который называется SuggestionBox фактически пользовательский элемент управления (.ascx) и традиционно это ссылается на шаблон с использованием
<umbraco:macro Alias="SuggestionBox" language="cshtml" runat="server"></umbraco:macro>
Но теперь мне нужно вызвать из сценария вместо бритвы, так что я пытался ;
@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)' -->
Любые идеи?
Я не пробовал это с .Net контролем внутри Razor (только бритва внутри бритвы) и творит чудеса. @RenderPage («~/macroscripts/dotMailerMessageBox.cshtml») Даже если это не сработает для вас, это может быть полезно для кого-то другого. –