在线测试系统asp.net mvc
Online test system asp.net mvc
我可以按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后
相关文章:
- 将Javascript数组发送到控制器ASP.NET MVC
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 在创建视图mvc.net的过程中使用javascript
- MVC.Net 4 Razor问题使用<文本>标签
- 将文件异步上传到 MVC.NET
- 无论如何 MVC.Net Cdn 调用回退
- 如何加快从Angular/Mvc.net加载图像的速度
- 如何使用角度模块“ui-route”在指令中查找模板URL,而不会在MVC .NET上出现错误
- 将MVC.NET Razor与Javascript结合起来构建一个数组
- MVC.NET提示用户登录
- 从mvc.net获取用于AngularJS http的url的健壮方法是什么?
- MVC.net 3 -可维护的,重构友好的Javascript文件
- 在c#代码MVC . net中检索html中的id元素
- MVC.NET中引导日期拾取器的问题
- MVC . net 4.6询问用户是否想要运行JS文件
- 要求在MVC . net中加载竞速问题
- asp.net mvc - .NET MVC:查找默认的 Bootsrap JavaScript
- 在MVC.NET中使用html helper编辑模式