4

非常に複雑な Umbraco のカミソリ スクリプトがあり、ある時点でマクロをレンダリングしたいと考えています。

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

何か案は?

4

3 に答える 3

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

このようなことを試してください。それは私にとってはうまくいきます...ナビゲーションマクロを作成しました。変数は toLower で指定する必要がありますが、キャップが使用されている場合はパラメーターが通過しないことに注意してください。

于 2012-11-10T18:44:29.420 に答える
2

Umbraco 4.10+では、Razorスクリプト内でマクロを呼び出すには、次を使用します。

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

于 2012-12-29T23:16:43.527 に答える
0

次のようなことを試してください:

@Html.Raw(umbraco.library.RenderMacroContent("<?UMBRACO_MACRO macroAlias=\"SuggestionBox\" />", Model.Id))
于 2012-05-21T20:13:57.610 に答える