【问题标题】:Render ascx user control from razor macro in Umbraco 4.7从 Umbraco 4.7 中的 razor 宏渲染 ascx 用户控件
【发布时间】:2012-08-21 13:55:11
【问题描述】:

我遇到了这个问题before 并且从未让它工作,但这次我没有其他方法可以解决它并且真的需要让它工作。

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

然后我有一个 razor 脚本来呈现整个页面,并且在该页面的某个区域内我想添加我的 ascx 控件。

如果我像这样直接在模板上添加控件:

<umbraco:macro Alias="SubnavRenderer" language="cshtml" runat="server"></umbraco:macro>

效果很好,但博客条目出现在内容之外。

所以我从 razor 脚本内部做这样的事情:

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 事件或类似事件。

有什么想法吗? 非常感谢

【问题讨论】:

    标签: .net razor macros umbraco ascx


    【解决方案1】:

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

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

    Model.GetNodesByType("博客");

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

    编辑

    你可以试试escaping your macro declaration - that's worked for me before;你也可以添加 runat="server" 属性。

    【讨论】:

    • 使用 item.Id 没有任何区别。也无法将版本从 4.7 更改为 4.8,该项目位于远程服务器上。我确实尝试将页面加载添加到宏脚本中,但没有实现任何目标。我用这个撞墙了。
    • @Nick 如果您将 ucomponents 包添加到您的 4.7 版本中,您将可以访问 uQuery。
    • 我已经向服务器管理器发送了安装它的请求。假设他们这样做了,那么我必须在 razor 脚本中做什么?
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多