【问题标题】:Paging on a Random Items Data Set随机项数据集上的分页
【发布时间】:2009-05-25 05:26:10
【问题描述】:

我必须在网站上生成一个项目列表,这些项目列表对于该特定项目列表的用户会话是随机的。

我将添加一个链接来演示该问题。 WebSite Link

场景: 当用户进来并点击链接时,页面上的项目应该是随机的。当用户点击第二、三页之后,它应该遵循它第一次生成的相同随机模式,这样当我回到第一页时,该页面上的项目将与用户第一次单击时相同关联。

我确实想过将所有项目的数据集随机化一次并保持它们在会话中,但这是最后的手段。

【问题讨论】:

    标签: linq-to-sql random pagination


    【解决方案1】:

    1) 您的随机化器必须是可重复的:通过为每个用户使用唯一的种子并使用 Random() 类,您可以生成相同的随机数序列 跨多个 HTTP 请求。但是,您必须将种子存储在某个地方(我建议使用 cookie 或隐藏的输入元素)。

    public Random GetGenerator() {
    DateTime now = new DateTime();
    long ticks = now.Ticks();
    
    if(getCookie("ticks") > 0) {
    // existing user:
    ticks = getCookie("ticks"); // you must implement this to get the user's seed
    } else {
    // new user:
    setCookie(now.Ticks()); // you must implement this to set a Cookie/input field value
    }
    
    return new Random(ticks);
    }
    

    2) 您必须生成 M*(N-1) 个数字才能最终获得第 N 页的随机数,其中 M 是每页的项目数。只有这样,您才能开始为请求的页面生成随机数。

    【讨论】:

    • 我试过这种技术。我做了和你写的一样的事情。现在发生的事情是它在我的机器上运行良好。它使用给定的种子生成相同的随机数集。当我将它放在 QA 服务器上时,它会为给定的种子返回不同的值,这在技术上不应该这样做。有什么想法吗?
    • 抱歉,这听起来不对。你确定种子在请求中是相同的吗?
    • 是的,我将种子保存在 ViewState 中,并将其反映在 URL 中。
    猜你喜欢
    • 2011-03-21
    • 2012-04-19
    • 2018-09-03
    • 2019-10-29
    • 1970-01-01
    • 2018-05-26
    • 2022-01-23
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多