Macros 使用Razor脚本在Umbraco中随机选择页面节点

Macros 使用Razor脚本在Umbraco中随机选择页面节点,macros,razor,umbraco,Macros,Razor,Umbraco,以下代码在其主页上显示了一个证明项目,该项目运行良好: @using umbraco.MacroEngines; @inherits umbraco.MacroEngines.DynamicNodeContext @{ var numberOfItems = 1; DynamicNodeList pages = @Model.Children.Where("umbracoNaviHide != true").Take(numberOfItems).OrderBy("UpdateDate

以下代码在其主页上显示了一个证明项目,该项目运行良好:

@using umbraco.MacroEngines;
@inherits umbraco.MacroEngines.DynamicNodeContext

@{ 
var numberOfItems = 1;
DynamicNodeList pages = @Model.Children.Where("umbracoNaviHide !=    true").Take(numberOfItems).OrderBy("UpdateDate");
}

<div>
    @foreach (DynamicNode page in pages)
    {        
       <h2>@page.Name</h2>
       <p>@page.GetProperty("introText")</p>
       <p><a href="@page.Url">Read more...</a></p>
       <p><strong>@page.GetProperty("personsName")</strong></p>                       
    }
</div>
@使用umbraco.MacroEngines;
@继承umbraco.MacroEngines.dynamicontext
@{ 
var numberOfItems=1;
dynamicnodelistpages=@Model.Children.Where(“umbracanavihide!=true”).Take(numberOfItems.OrderBy(“UpdateDate”);
}
@foreach(页中的DynamicNode页)
{        
@页码.名称
@page.GetProperty(“introText”)

@page.GetProperty(“PersonName”)

}
我想通过选择一个随机的推荐信,将这个小剧本进一步发展。我该怎么做呢?

试试看

var r = new Random();
var numberOfItems = 1;
List<DynamicNode> pages = new DynamicNode(Model.Id).Descendants().Items.Where(x => x.Visible).OrderBy(x => r.Next()).Take(numberOfItems).ToList();       
var r=new Random();
var numberOfItems=1;
List pages=new DynamicNode(Model.Id).subjects().Items.Where(x=>x.Visible.OrderBy(x=>r.Next()).Take(numberOfItems.ToList();

尝试元素的Linq方法:

Random r = new Random();
int max = 10;   // set your own max

var items = @Model.Content.AncestorOrSelf(1).Descendants("SomeNode").First().Descendants("SomeChildNode").First().Children;
var item = items.ElementAt(r.Next(0, max));  // use linq ElementAt to retrieve your random node

我更喜欢使用Linq生成随机元数据,然后按其排序的方法

IPublishedContent containerNode = Umbraco.TypedContent(1144);
IPublishedContent randomlySelectedChildNode = containerNode.Children.OrderBy(n => Guid.NewGuid()).FirstOrDefault();
还有一个内置的Umbraco扩展,您可以使用:

var randomNode = containerNode.Children.RandomOrder().FirstOrDefault();

谢谢,不过我不完全确定它是否有效。这可能是因为目前只有两个随机项目,随着我们添加更多,它可能会工作得更好?