在线测试系统asp.net mvc
本文关键字:mvc net asp 测试系统 在线 | 更新日期: 2023-09-27 18:26:40
我可以按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后