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

Umbraco-使用Razor渲染.Net用户控件(ascx)宏,razor,macros,render,umbraco,Razor,Macros,Render,Umbraco,我在Umbraco中有一个非常复杂的razor脚本,我想在其中的某个点上渲染一个宏 被称为SuggestionBox的宏实际上是一个用户控件(.ascx),通常在模板上使用 <umbraco:macro Alias="SuggestionBox" language="cshtml" runat="server"></umbraco:macro> 以及: @RenderPage("SuggestionBox") 没有运气,因为我肯定我用错了 我在某个地方读到,如果页面被

我在Umbraco中有一个非常复杂的razor脚本,我想在其中的某个点上渲染一个宏

被称为SuggestionBox的宏实际上是一个用户控件(.ascx),通常在模板上使用

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

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

其中EventsRender呈现理想情况下应包含SuggestionBox的页面

使用

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

@Html.Raw(umbraco.library.RenderMacroContent(“尝试以下操作:

@Html.Raw(umbraco.library.RenderMacroContent(
@{
HtmlTextWriter=新的HtmlTextWriter(this.Output);
var navigation=new umbraco.presentation.templateControls.Macro();
navigation.Alias=“navigation”;
navigation.MacroAttributes.Add(“ulclass”、“art vmenu”);
导航。宏属性。添加(“级别”,2);
navigation.RenderControl(writer);}

尝试类似的方法。它对我很有用…我制作了一个导航宏。请注意,虽然您的变量应该以较低的格式给出,但如果使用大写,则参数将无法通过。

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


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

我得到了这个错误:嗯……我想这个错误是来自用户控件。您在以标准方式(在razor宏之外)将用户控件宏添加到页面中时有任何问题吗?如果母版页和用户控件都包含表单标记,则可能会发生冲突。ASP.Net不喜欢嵌套表单标记。如果我以传统方式将控件添加到模板上,则该控件可以正常工作,但由于razor脚本包含大量标记,我希望它显示在页面中的特定位置。但是,作为临时解决方案在上,razor脚本的内容呈现后,我的控件出现在页面底部,这是可行的。因此,将其添加到razor脚本中是可行的,但仅在当前标记之外?您可以发布一些标记吗?不,无论我将其放在何处,它在razor脚本中都不起作用。错误是我第一次发布的错误注释。仅当我从模板中使用它时,它才有效。检查更新的问题以查看标记。我没有在Razor中使用.Net控件(仅Razor中使用Razor)尝试此操作,效果非常好。@RenderPage(~/macroscript/dotMailerMessageBox.cshtml)),即使它对您不起作用,也可能对其他人有用。谢谢!关于的注释“ToLower”结束了几个小时的桌面工作。请澄清“ToLower”的概念。我坚持这个观点。
<!-- 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)' -->
@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>