在Umbraco 4.7中使用razor宏渲染ascx用户控件

时间:2012-08-21 13:55:12

标签: .net razor macros umbraco ascx

我遇到了这个问题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事件或类似事件。

有什么想法吗? 非常感谢

1 个答案:

答案 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”属性。