在哪里存储临时数据在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
}
答
你也可以将其与一个独特的密钥的GUID视图存储在会话和存储只有sessionKey作为隐藏输入
实际上它也可能取决于数据量,你会商店
答
听起来像taskGenerator.GenerateTask()会给你一些类型的任务,但是该任务在任何地方持久? (这个方法从哪里获取任务)?
如果存在与任务关联的ID,则可以在视图中向下发送taskId,然后在他们回答时再次查看任务。然后您可以从该任务中获取CorrectAnswer并进行比较。
当然,如果用户查看页面的来源,用户可以看到正确的答案。 – 2010-05-05 18:53:49
@RexM,不要在页面上显示正确的答案。只是用户输入的答案。最终验证应在最后一步之后完成。 – Joel 2010-05-05 20:40:41