0

次の方法で 5 ページのいずれかをランダムに選択するクイズ アプリがあります。

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

メソッドが既にアクセスしたページにアクセスできないようにするにはどうすればよいですか?

4

3 に答える 3

2

このようなもの(未テスト)

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 ));
}
于 2013-02-26T03:57:44.763 に答える
0
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 ));
}
于 2013-02-26T03:59:15.110 に答える
0

1,2,15,12 のような csv を使用してセッション変数を維持し、これらの値に対して次をチェックします。セッションに存在する場合は、サイコロをもう一度振ります。そうでない場合は、ページを表示し、セッション変数に現在の次を追加します。

于 2013-02-26T03:51:14.387 に答える