Umbraco Razor-通过多节点选择器进行迭代

Umbraco Razor-通过多节点选择器进行迭代,razor,umbraco,loops,Razor,Umbraco,Loops,我试图用razor遍历多节点选择器。我的小部件的别名是“venuesPicker”。我得到了一个错误,“无法加载宏文件”。以下是我目前的情况: <umbraco:Macro runat="server" language="cshtml"> @{ using uComponents.Core; using uComponents.Core.uQueryExtensions; foreach (var x in Model.venuesPicker)

我试图用razor遍历多节点选择器。我的小部件的别名是“venuesPicker”。我得到了一个错误,“无法加载宏文件”。以下是我目前的情况:

<umbraco:Macro runat="server" language="cshtml">
@{
    using uComponents.Core;
    using uComponents.Core.uQueryExtensions;

    foreach (var x in Model.venuesPicker)
    {
        @x.highlightTitle
    }
}
</umbraco:Macro>

@{
使用uComponents.Core;
使用uComponents.Core.uQueryExtensions;
foreach(venuesPicker模型中的var x)
{
@x、 高光标题
}
}

查看我的答案。基本上,根据MNTP使用的是XML还是CSV,您可以执行以下操作之一:

CSV:

@using umbraco.MacroEngines
@inherits DynamicNodeContext
@if (Model.HasValue("venuesPicker"))
{
    string[] ids = Model.venuesPicker.Split(',');

    <ul>
    @foreach (string id in ids)
    {
        var node = Library.NodeById(id);
        if (node.Id != 0)
        {
            // If node exists:
            <li><a href="@node.Url">@node.Name</a></li>
        }
    }
    </ul>
}
@using umbraco.MacroEngines
@inherits DynamicNodeContext
@if (Model.HasValue("venuesPicker"))
{
    <ul>
    @foreach (var item in Model.venuesPicker)
    {
        var node = Library.NodeById(item.InnerText);
        if (node.Id != 0)
        {
            // If node exists:
            <li><a href="@node.Url">@node.Name</a></li>
        }
    }
    </ul>
}
@使用umbraco.MacroEngines
@继承动态文本
@if(Model.HasValue(“venuesPicker”))
{
string[]ids=Model.venuesPicker.Split(',');
    @foreach(id中的字符串id) { var node=Library.NodeById(id); 如果(node.Id!=0) { //如果节点存在:
  • } }
}
XML:

@using umbraco.MacroEngines
@inherits DynamicNodeContext
@if (Model.HasValue("venuesPicker"))
{
    string[] ids = Model.venuesPicker.Split(',');

    <ul>
    @foreach (string id in ids)
    {
        var node = Library.NodeById(id);
        if (node.Id != 0)
        {
            // If node exists:
            <li><a href="@node.Url">@node.Name</a></li>
        }
    }
    </ul>
}
@using umbraco.MacroEngines
@inherits DynamicNodeContext
@if (Model.HasValue("venuesPicker"))
{
    <ul>
    @foreach (var item in Model.venuesPicker)
    {
        var node = Library.NodeById(item.InnerText);
        if (node.Id != 0)
        {
            // If node exists:
            <li><a href="@node.Url">@node.Name</a></li>
        }
    }
    </ul>
}
@使用umbraco.MacroEngines
@继承动态文本
@if(Model.HasValue(“venuesPicker”))
{
    @foreach(Model.venuesPicker中的var项) { var node=Library.NodeById(item.InnerText); 如果(node.Id!=0) { //如果节点存在:
  • } }
}
您也可以使用uQuery.getNodesByCSV或uQuery.getMediaByCSV。 我认为uQuery是在4.9版本中添加到Umbraco内核的,否则您可以安装uComponents包

例如,我在4.9.1中有类似的内容来循环一些媒体

@using umbraco.MacroEngines
@using umbraco.cms.businesslogic.media
@inherits umbraco.MacroEngines.DynamicNodeContext
@{
    <div class="slideshow">
        @foreach (Media img in uQuery.GetMediaByCsv(Model.lightBoxImages))
        {
            <figure>
                <a href="#">
                    <img src="@img.GetImageUrl()"  />
                </a>
            </figure>   
        }
    </div>
}
@使用umbraco.MacroEngines
@使用umbraco.cms.businesslogic.media
@继承umbraco.MacroEngines.dynamicontext
@{
@foreach(uQuery.GetMediaByCsv(Model.lightBoxImages)中的媒体img)
{
}
}