3

我以前遇到过这个问题但从来没有让它工作,但这次我没有其他方法可以解决它,真的需要让它工作。

我有一个简单的 ascx 控件,它读取 RSS 提要并以简单的 html 输出。后面的代码很简单。

然后我有一个 razor 脚本,它呈现整个页面,并在该页面的某个区域内添加我的 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 事件或类似的事件。

有任何想法吗?非常感谢

4

1 回答 1

0

当我第一次阅读您的帖子时,我打算建议您在需要宏的位置添加一个 asp:PlaceHolder,然后使用Page PreInit事件动态生成控件并将其弹出到占位符中。

我还建议您使用uQuery(它带有 ucomponents 并且在 4.8 的 Umbraco 核心中 - 以便您的 razor 脚本简化为:

Model.GetNodesByType("博客");

但是看看你的 html.raw 命令,也许这就是问题所在——你不应该使用item.Id而不是Model.Id吗?

编辑

你可以尝试转义你的宏声明——这对我有用;你也可以添加 runat="server" 属性。

于 2012-08-21T22:34:28.277 回答