Использование сценария Razor для случайного выбора узла страницы в Umbraco - PullRequest
2 голосов
/ 07 октября 2011

Следующий код отображает элемент отзыва на главной странице http://www.keelycattschoolofdance.co.uk, который прекрасно работает:

@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>

Я бы хотел продвинуть этот маленький сценарий на шаг вперед, выбрав случайный отзыв. Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 07 октября 2011

1001 * попробовать *

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();       
3 голосов
/ 21 июня 2016

Я предпочитаю метод использования Linq для генерации случайных метаданных, а затем сортировки по ним.

IPublishedContent containerNode = Umbraco.TypedContent(1144);
IPublishedContent randomlySelectedChildNode = containerNode.Children.OrderBy(n => Guid.NewGuid()).FirstOrDefault();

Существует также встроенное расширение Umbraco, которое вы можете использовать:

var randomNode = containerNode.Children.RandomOrder().FirstOrDefault();
0 голосов
/ 17 августа 2013

Попробуйте метод ElementAt () 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
...