gpt4 book ai didi

razor - Umbraco - 使用 Razor 渲染 .Net 用户控件 (ascx) 宏

转载 作者:行者123 更新时间:2023-12-04 22:34:32 26 4
gpt4 key购买 nike

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

有任何想法吗?

最佳答案

<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 中给出,但如果使用大写字母,则参数将不会通过。

关于razor - Umbraco - 使用 Razor 渲染 .Net 用户控件 (ascx) 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com