我开始学习MVC 2.0并且我正在尝试使用测验创建一个网站:用户被问到一个问题并给出了几个答案选项。如果他选择了正确的答案,他会获得一些积分,如果他没有,他会失去他们。
我尝试以下方式执行此操作
public class HomeController : Controller
{
private ITaskGenerator taskGenerator = new TaskGenerator();
private string correctAnswer;
public ActionResult Index()
{
var task = taskGenerator .GenerateTask();
ViewData["Task"] = task.Task;
ViewData["Options"] = task.Options;
correctAnswer= task.CorrectAnswer;
return View();
}
public ActionResult Answer(string id)
{
if (id == correctAnswer)
return View("Correct")
return View("Incorrect");
}
}
但是我遇到了一个问题:当用户回答时,cotroller类被重新创建并且我没有正确答案。那么存储正确答案的最佳位置是什么?我应该为此创建一个静态类吗? 谢谢你的帮助!
答案 0 :(得分:2)
有多种不同的方法可以跨多个请求保留数据。
仅举几例。其中最简单的可能是视图状态实现。你可以像这样滚动
<input type="hidden" name="question_1" value="<%=ViewData["question_1"]%>" />
此输入将在下次提交时重新发布,因此您可以跟踪该值。
public ActionResult Step1Post(string answer)
{
ViewData["question_1"] = answer;
return View("Step2")
}
public ActionResult Step2Post(string answer, string question_1)
{
question_1; // the answer from step 1
answer; // the answer from step 2
}
答案 1 :(得分:0)
您还可以使用唯一的密钥guid将其存储在会话中,并将视图中的仅sessionKey 存储为隐藏输入
实际上它可能还取决于您要存储的数据量
答案 2 :(得分:0)
这听起来像taskGenerator.GenerateTask()会给你某种类型的任务,但是任务持久存在吗? (这种方法从哪里获得任务)?
如果有与任务关联的ID,您可以在视图中向下发送taskId,然后在他们回答时再次查看任务。然后,您可以从该任务中获取CorrectAnswer并进行比较。