【问题标题】:Umbraco - Render .Net User Control (ascx) macro with RazorUmbraco - 使用 Razor 渲染 .Net 用户控制 (ascx) 宏
【发布时间】: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


【解决方案1】:
<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 中给出,但如果使用大写,参数将不会通过。

【讨论】:

  • 谢谢!那条关于“ToLower”的评论结束了几个小时的主管
  • 请说清楚“toLower”的概念。我坚持这个。
【解决方案2】:

在 Umbraco 4.10+ 中要在 Razor 脚本中调用宏,请使用:

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

【讨论】:

    【解决方案3】:

    试试这样的:

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

    【讨论】:

    • 我收到此错误:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多