C# 跟踪访问的页面

C# 跟踪访问的页面,c#,asp.net,random,C#,Asp.net,Random,我有一个测验应用程序,它使用以下方法从5个页面中随机选取一个: protected void newWindow(object sender, EventArgs e) { int next = new Random().Next( 5 ) + 1; Response.Redirect(string.Format( "Question{0}.aspx", next )); } 如何防止该方法访问已访问的页面?使用csv维护一个会话变量,如1、2、

我有一个测验应用程序,它使用以下方法从5个页面中随机选取一个:

protected void newWindow(object sender, EventArgs e)
    {
        int next = new Random().Next( 5 ) + 1;
        Response.Redirect(string.Format( "Question{0}.aspx", next ));
    }

如何防止该方法访问已访问的页面?

使用csv维护一个会话变量,如1、2、15、12,并根据这些值检查下一个。如果会话中存在下一个变量,则再次掷骰子,否则显示页面并将当前下一个变量附加到会话变量。

类似的内容(未测试)

受保护的void新窗口(对象发送方,事件参数e)
{
列出问题=(列出)会议[“问题”];
如果(问题==null)
{
问题=新列表(新int[]{1,2,3,4,5});
}
int-nextIndex=new Random().Next(questions.Count());
int next=问题[nextIndex];
问题.删除(下一个索引);
会议[“问题”]=问题;
重定向(string.Format(“问题{0}.aspx”,下一步));
}
使用System.Linq;
受保护的void newWindow(对象发送方、事件参数e)
{
var PAGESVISTITED=(列表)会话[“已访问”]?新列表(){1,2,3,4,5};
如果(!pagesVisited.Any())
//用户访问了所有测验
var index=new Random().Next(0,pagesVisited.Count)
var next=指数+1;
页面浏览。删除(索引);
会话[“已访问”]=页面已访问;
重定向(string.Format(“问题{0}.aspx”,下一步));
}

为什么您不能跟踪页面,然后对照页面进行检查,并将其重定向到未访问的页面..?int nextIndex=new Random()中的5不应该是吗?下一步(5);是否替换为当前列表大小?
protected void newWindow(object sender, EventArgs e)
{
    List<int> questions = (List<int>)Session["Questions"];
    if (questions == null)
    {
        questions = new List<int>(new int[] { 1, 2, 3, 4, 5 });
    }

    int nextIndex = new Random().Next(questions.Count());
    int next = questions[nextIndex];
    questions.RemoveAt(nextIndex);
    Session["Questions"] = questions;

    Response.Redirect(string.Format( "Question{0}.aspx", next ));
}
using System.Linq;

protected void newWindow(object sender, EventArgs e)
{
    var pagesVisited = (List<int>)Session["Visited"] ?? new List<int>() { 1, 2, 3, 4, 5 };

    if (!pagesVisited.Any())
        // the user has visited all quizes

    var index = new Random().Next(0, pagesVisited.Count)
    var next =  index + 1;

    pagesVisited.RemoveAt(index);

    Session["Visited"] = pagesVisited;

    Response.Redirect(string.Format( "Question{0}.aspx", next ));
}