在哪里存储临时数据在MVC 2.0项目

问题描述:

我开始学习MVC 2.0,我试图创建一个测验的网站:用户被问及一个问题,并给出了答案的几个选项。如果他选择正确的答案,他会得到一些积分,如果他没有,他会放松他们。在哪里存储临时数据在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类重建和我失去正确的答案。那么存储正确答案的最佳地点是什么?我应该为此创建一个静态类吗?
感谢您的帮助!

有很多不同的方法可以跨多个请求持久保存数据。

  • 饼干
  • 数据库层
  • 视图状态(呈现数据向下,并通过它在每个请求备份)

仅举几例。其中最简单的可能是视图状态实现。你可以像这样滚动你自己

<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 
} 
+0

当然,如果用户查看页面的来源,用户可以看到正确的答案。 – 2010-05-05 18:53:49

+0

@RexM,不要在页面上显示正确的答案。只是用户输入的答案。最终验证应在最后一步之后完成。 – Joel 2010-05-05 20:40:41

你也可以将其与一个独特的密钥的GUID视图存储在会话和存储只有sessionKey作为隐藏输入

实际上它也可能取决于数据量,你会商店

听起来像taskGenerator.GenerateTask()会给你一些类型的任务,但是该任务在任何地方持久? (这个方法从哪里获取任务)?

如果存在与任务关联的ID,则可以在视图中向下发送taskId,然后在他们回答时再次查看任务。然后您可以从该任务中获取CorrectAnswer并进行比较。