2011-10-07 1 views
2

Le code suivant affiche un élément témoignage sur la page d'accueil de http://www.keelycattschoolofdance.co.uk qui fonctionne bien:en utilisant un script Razor pour choisir au hasard un nœud de page dans Umbraco

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

je voudrais prendre ce petit script une étape supplémentaire en sélectionnant un témoignage aléatoire. Comment devrais-je faire cela?

Répondre

4

essayer

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();  
+0

Merci bien pas tout à fait que cela fonctionne bien. C'est peut-être parce qu'à l'heure actuelle il n'y a que deux éléments à randomiser et que nous en ajoutons plus, cela fonctionnera peut-être mieux peut-être? –

0

Essayez le ElementAt() Méthode 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 
1

Je préfère la méthode d'utilisation Linq pour générer des méta-données aléatoires puis le tri par celui-ci.

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

Il y a aussi une extension Umbraco intégré vous pouvez utiliser:

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