在线测试系统ASP.NET MVC - javascript

我能够按ID显示问题,但不知道如何为不同用户随机显示问题,并且每次用户登录新的随机组合时都会显示问题。
有人可以指导吗?

我的控制器:

public ActionResult Index()
    {
        var question = Quiz.Instance.LoadQuiz();
        return View(question);

    }

    [HttpPost]
    public ActionResult Index(string Opt)
    {
        if (Quiz.Instance.IsComplete)
        {
            return RedirectToAction("ShowResult");
        }
        Quiz.Instance.SaveAnswers(Opt);
        if (Quiz.Instance.MovetoNext())
        {
            var question = Quiz.Instance.LoadQuiz();
            return View(question);
        }
        Quiz.Instance.IsComplete = true;
        return RedirectToAction("ShowResult");
    }`

测验资料库:

public Question_OptionViewModel LoadQuiz()
    {


        var questions = db.Questions.Find(Q_ID);
        var options = from o in db.Options
                      select o;
        options = options.Where(o => o.Q_Id == Q_ID);

        var viewmodel = new Question_OptionViewModel()
        {
            Question = questions,
            Options = options
        };
        return viewmodel;
    }

    public void SaveAnswers(string answer)
    {
        Attempt at = new Attempt()
        {
            Q_Id = Q_ID,
            Answer = answer, 
            Registration_number = 1312153  
        };
        db.Attempts.Add(at);
        db.SaveChanges();
        var questions = db.Questions.Where(q => q.Q_Id == Q_ID).First();
        if (at.Answer == questions.Correct_Ans)
        {
            result.Score++;
        }
    }

    public bool MovetoNext()
    {
        int questions = db.Questions.Where(q => q.Test_Id == 1).Count();
        bool canmove = false;
        if (questions > Q_ID)
        {
            Q_ID++;
            canmove = true;
        }
        return canmove;
    }

我的看法:-

    @model OnlineTestSystem.ViewModels.Question_OptionViewModel

@{
  ViewBag.Title = "Quiz";
}
    $("#submitButton").live("click", function () {
    $.get($(this), function (response) {
        $("#quiz").replaceWith($("#quiz", response));


    });
    return false;
});
});

    <div id="quiz" style="text-align:center">
        @using (Html.BeginForm("Index", "Test"))
        {
            <fieldset>


                <legend><h2>@Model.Question.QuestionText</h2></legend>

            <li>
                @foreach (var opt in Model.Options)
                {
                    <ul class="list-inline" style="font-size:17px">
                        @Html.RadioButton("Opt", @opt.Opt) @opt.Opt
                    </ul>
                }
            </li>
            <input class="btn btn-default" type="submit" value="Next" id="submitButton" />
        </fieldset>
        }

    </div>

``

参考方案

您可以使用Shuffle算法简单地将问题随机化。您可以使用Fisher-Yates算法将问题随机化。

您可以将算法封装在如下扩展方法中:

public static class Extensions
{
   private static Random rnd = new Random();
   public static void Shuffle<T>(this IList<T> collection)
   {
       int n = collection.Count;
       while (n > 1)
       {
           n--;
           int k = rnd.Next(n + 1);
           T value = collection[k];
           collection[k] = collection[n];
           collection[n] = value;
       }
   }
}

然后,在您的LoadQuiz方法上,可以调用Shuffle扩展方法。

var questions = db.Questions.Find(Q_ID).ToList().Shuffle();

您还可以查看此SO post

调试捆绑和版本化的javascript文件 - javascript

我已经使用Bundleconfig.cs将我的JavaScript文件打包如下:bundles.Add(new ScriptBundle("~/bundles/resultscripts").Include( "~/Scripts/spectrum.js", "~/Scripts/notify.js"…

.NET C#Webbrowser填充输入,不带ID或类名 - javascript

我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…

获取JavaScript值到C#字符串 - javascript

                        是否可以在C#中执行类似的操作?该值为“ 10/05/2014”string jsValue = javascript("$('#EstimatedStartDate').val()"); 参考方案 您能否更详细地阐明您要做什么。看来您正在尝试从javascript(客户…

ASP.NET-如何更改JSON序列化的方式? - javascript

我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …

在Asp.Net MVC Razor中将HTML视图作为电子邮件附件发送 - javascript

我目前在Razor ASP.Net MVC工作。在这里,我有一个HTML view,名为“客户付款”,它是根据某些计算在RAZOR中生成的,并显示在HTML dialog中。我想将此Html View作为电子邮件附件发送。但是在这里,我感到困惑,我不得不将这个HTML View转移到.PDF or .jpg中的某些jQuery中,然后将其发送到Control…