我遇到了这个问题before并且从来没有让它工作过,但这次我无法绕过它并且真的需要让它工作。
我有一个简单的ascx控件,可以读取RSS提要并以简单的html输出。背后的代码非常简单。
然后我有一个剃刀脚本呈现整个页面,并且在该页面的某个区域内我想添加我的ascx控件。
如果我在模板上直接添加控件,如下所示:
<umbraco:macro Alias="SubnavRenderer" language="cshtml" runat="server"></umbraco:macro>
效果很好,但博客条目显示在内容之外。
所以从剃刀脚本里面我做了这样的事情:
foreach (var item in Model.Children)
{
...
else if(item.NodeTypeAlias == "Blog")
{
@Html.Raw(umbraco.library.RenderMacroContent("<?UMBRACO_MACRO macroAlias=\"BlogRenderer\"></?UMBRACO_MACRO>", Model.Id));
}
}
这会呈现一个空div,但内容无法在其中呈现,因此宏处于半工作状态。 我怀疑它已连接到页面的生命周期。该宏有一个可能被跳过的page_load事件或类似事件。
有什么想法吗? 非常感谢
答案 0 :(得分:0)
当我第一次阅读你的帖子时,我建议你添加一个asp:PlaceHolder,你想要宏,然后使用Page PreInit事件动态生成控件并将其弹出到占位符中。
我还建议你使用uQuery(随附ucomponents,并且在4.8的Umbraco核心中) - 这样你的剃刀脚本就简化为:
Model.GetNodesByType( “博客”);
但是看看你的html.raw命令,或许这就是问题 - 你不应该使用 item.Id 而不是 Model.Id 吗?
修改强>
你可以尝试escaping your macro declaration - that's worked for me before;你也可以添加runat =“server”属性。