【问题标题】:Random from list but show the same one for a period of one day, then random new one the next从列表中随机但在一天内显示相同的一个,然后在下一个随机新的
【发布时间】:2020-05-12 21:44:38
【问题描述】:

我正在使用 Umbraco,它使用 MVC Razor。但是这个问题是一个通用的 C# .Random() 问题。

我从“特色项目”列表中随机抽取。我得到列表,找到下一个然后显示它。但是,这会拉动每次浏览器刷新。我需要的是让“特色项目”显示一整天,然后在第二天从列表中拉出一个新的随机项目。

到目前为止,我拉随机节点的代码如下。我如何将其扩展为每天只拉一次随机项目,然后第二天拉一个新项目。这可以仅使用 C# 完成,还是 Javascript 将成为更好的途径。 我都想到了,但是我将如何使用 C# MVC Razor 每天进行一次随机拉取?

var random = new Random();
var fCollectList = Umbraco.Content(7471).Descendants("featuredItem");
  int index = random.Next(fCollectList.Count());
//NEED TO SHOW THE SAME ONE FOR EVERYONE ON A DAY, THEN THE NEXT DAY SHOW ANOTHER RANDOM ONE. 
<p>@fCollectList[index].Name</p>

【问题讨论】:

  • 您应该将该值缓存为 24 小时到期。
  • 我将如何缓存该值? C#,Javascript。我不知道如何在 C# 中做到这一点
  • 单例模式搜索吧
  • 无论如何,你都注定要尝试一些可靠的搜索
  • 如果你在 umbraco 你可以使用这个助手:@Html.CachedPartial("PartialView", MyModel, 3600, true);

标签: c# razor umbraco


【解决方案1】:

正如 cmets 中所建议的,您需要将值缓存在某处,但如何缓存它取决于您的要求。

如果您希望所有用户都使用相同的值,那么最好将其存储在数据库中,在表中您将拥有 ValueCreatedAt 列,每次刷新时您将检查 CreatedAt是今天然后只返回Value 否则生成新值并使用新的ValueCreatedAt 更新记录。

如果您想为每个用户提供不同的值,那么您可以通过额外的列调用 UserId 执行与上述相同的操作,或者通过将 ValueCreatedAt 存储在本地存储中,在 javascript 中执行此操作,然后您可以应用与上面相同的值生成逻辑,但在 javascript 端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2022-01-02
    • 2011-01-25
    相关资源
    最近更新 更多