razor macros render umbraco

Umbraco-Renderiza Macro.Net User Control(ascx) con Razor



macros (3)

Tengo una secuencia de comandos de navaja en Umbraco que es bastante compleja y quiero en algún momento de ella hacer una macro en ella.

La macro que se llama SuggestionBox es en realidad un control de usuario (.ascx) y tradicionalmente se hace referencia a ella en la plantilla usando

<umbraco:macro Alias="SuggestionBox" language="cshtml" runat="server"></umbraco:macro>

Pero ahora necesito llamarlo del guión de la navaja, así que lo intenté;

@Html.Raw(umbraco.library.RenderMacroContent("SuggestionBox", Model.Id))

tanto como:

@RenderPage("SuggestionBox")

Sin suerte, estoy seguro de que los estoy usando equivocadamente.

Leí en algún lado que podría ser inviable si la página está envuelta en una página maestra.

Funciona si lo agrego a la Plantilla como tradicionalmente lo haría:

<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>

Donde EventsRenderer representa la página que idealmente debería contener el SuggestionBox.

utilizando

@Html.Raw(umbraco.library.RenderMacroContent("<?UMBRACO_MACRO macroAlias=/"SuggestionBox/" />", Model.Id))

Me da este error:

<!-- 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)'' -->

¿Algunas ideas?


Pruebe algo como esto:

@Html.Raw(umbraco.library.RenderMacroContent("<?UMBRACO_MACRO macroAlias=/"SuggestionBox/" />", Model.Id))


<umbraco:Macro runat="server" language="cshtml">@{ HtmlTextWriter writer = new HtmlTextWriter(this.Output); var navigation = new umbraco.presentation.templateControls.Macro(); navigation.Alias = "Navigation"; navigation.MacroAttributes.Add("ulclass", "art-vmenu"); navigation.MacroAttributes.Add("level", 2); navigation.RenderControl(writer); }</umbraco:Macro>

Prueba algo como esto. Funciona para mí ... He creado una macro de navegación. Tenga en cuenta que las variables se deben dar en Baja, si se usan límites, los parámetros no se mostrarán.


En Umbraco 4.10+ Para llamar a una macro dentro de la secuencia de comandos Razor, use:

@ Umbraco.RenderMacro ("macroNameHere", new {propertyName1 = CurrentPage.pageProperty}))