选择随机内容点

时间:2013-09-25 09:10:25

标签: c1-cms

我有10个内容点。我想要一个页面随机显示其中一个。

我尝试过使用函数'ShowContentSpots' - 但是它显示了所有这些&不会循环。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

您应该编辑ShowContentSpots函数并:

  1. 更改代码,以便只检索一个项目(不是全部)
  2. 在检索单个项目时添加一些随机数发生器
  3. 快速解决方案是:

    @if (!string.IsNullOrEmpty(ContentSpotIds))
    {
        var rand = new Random();
    
        var spotIds = ContentSpotIds.Split(',').Select(f=>new Guid(f));
        var spots = Data.Get<Content.ContentSpot>().Where(f=> spotIds.Contains(f.Id)).ToList();
        if (spots.Any()) 
        {
            var spot = spots[rand.Next(spots.Count)];
    
            <div class="spots">
                <div class="spot">
                    @Html.Raw(spot.Content)
                </div>  
            </div>
        }
    }
    

    请注意,这是原始功能代码的一部分。 我在这里补充道:

    var rand = new Random();
    

    并修改了这部分:

    var spot = spots[rand.Next(spots.Count)];
    
    <div class="spots">
        <div class="spot">
            @Html.Raw(spot.Content)
        </div>  
    </div>
    

    这只是一个快速的样本。因此,当您快速刷新页面时,每次点都不会改变 - 因为我们每次引用页面时都会创建一个新的Random对象。

    要避免这种情况,只需将Random对象初始化一次,然后在其他地方初始化,并在此函数中使用它。