You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Umbraco中获取Macro Container中的宏列表并实现动态渲染?

解决Umbraco Macro Container动态遍历渲染的问题

刚接触Umbraco和C#的时候,我也踩过Macro Container的这个坑——它存的可不是直接的宏对象列表,而是一段打包好的HTML字符串,所以你直接转IEnumerable<Object>肯定拿不到想要的结果。别慌,咱们一步步来解决:

为什么你原来的代码不生效?

Macro Container字段在Umbraco后台保存后,实际存储的是包含宏信息的HTML片段(比如每个宏对应一个带data-macro-alias属性的div),不是可直接遍历的对象集合。所以你拿到的是整段字符串,没法直接循环。

正确的处理步骤

我们需要先解析这段HTML,提取出每个宏的别名和参数,再动态渲染它们。Umbraco项目默认已经引用了HtmlAgilityPack,刚好可以用它来解析HTML:

1. 先获取Macro Container的原始HTML值

首先从节点中拿到原始的宏容器内容:

var macroContainerHtml = node.GetPropertyValue<string>("macro");

2. 解析HTML提取宏信息

用HtmlAgilityPack加载这段HTML,遍历每个宏对应的节点,提取宏别名和参数:

// 初始化HTML文档
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(macroContainerHtml);

// 找到所有Macro Container里的宏节点(Umbraco生成的宏节点都带data-macro-alias属性)
var macroNodes = htmlDoc.DocumentNode.SelectNodes("//div[@data-macro-alias]");

3. 动态遍历并渲染每个宏

如果宏节点存在,就循环遍历,提取别名和参数,然后调用Umbraco.RenderMacro渲染:

@if (macroNodes != null)
{
    foreach (var macroNode in macroNodes)
    {
        // 获取宏别名
        var macroAlias = macroNode.GetAttributeValue("data-macro-alias", string.Empty);
        
        if (!string.IsNullOrEmpty(macroAlias))
        {
            // 提取宏的参数(如果有的话)
            var macroParams = new Dictionary<string, object>();
            foreach (var attr in macroNode.Attributes)
            {
                // Umbraco的宏参数会以data-macro-param-开头
                if (attr.Name.StartsWith("data-macro-param-"))
                {
                    var paramName = attr.Name.Replace("data-macro-param-", string.Empty);
                    macroParams.Add(paramName, attr.Value);
                }
            }
            
            // 动态渲染宏
            @Umbraco.RenderMacro(macroAlias, macroParams)
        }
    }
}

额外注意事项

  • 别忘了在视图顶部引用HtmlAgilityPack的命名空间:
@using HtmlAgilityPack
  • 如果你的Macro Container可能为空,一定要加null判断,避免空引用异常。
  • 如果宏没有参数,macroParams会是空字典,RenderMacro也能正常工作,不用担心。

这样就能实现你想要的动态渲染效果了——不管后台选了多少个宏,都能逐个渲染出来~

内容的提问来源于stack exchange,提问作者MadzQuestioning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:33:12