代码之家  ›  专栏  ›  技术社区  ›  StuffHappens

在MVC 2.0项目中存储临时数据的位置

  •  0
  • StuffHappens  · 技术社区  · 15 年前

    我开始学习MVC 2.0,我正在尝试创建一个带有小测验的站点:用户被问到一个问题,并给出了几个答案选项。如果他选择了正确的答案,他会得到一些分数,如果他没有,他就会失去这些分数。

    我试着这样做

    < Prime> <代码> 公共类主控制器:控制器 { private ITaskGenerator taskGenerator=新taskGenerator(); 私有字符串correctAnswer;

    public actionresult index())
    {
    var task=taskgenerator.generatetask();
    viewdata[“task”]=任务.task;
    viewdata[“选项”]=task.options;
    
    correctAnswer=task.correctAnswer;
    返回视图();
    }
    
    公共操作结果答案(字符串ID)
    {
    如果(id==correctAnswer)
    返回视图(“正确”)
    
    返回视图(“错误”);
    }
    }
    < /代码> 
    
    

    .>.

    
    

    但我有一个问题:当用户回答问题时,cotroller类被重新创建,而我失去了正确的答案。那么,存储正确答案的最佳位置是什么?我应该为此目的创建一个静态类吗?< BR> 谢谢你的帮助!

    但我有一个问题:当用户回答问题时,cotroller类被重新创建,而我失去了正确的答案。那么,存储正确答案的最佳位置是什么?我应该为此目的创建一个静态类吗?
    谢谢你的帮助!

    3 回复  |  直到 15 年前
        1
  •  2
  •   Joel    15 年前

    有许多不同的方法可以跨多个请求持久化数据。

    • 曲奇饼
    • 数据库层
    • 视图状态(将数据呈现下来,并在每个请求中将其传回)

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

    <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
    }
    
        2
  •  0
  •   Omu    15 年前

    您还可以在会话中使用唯一的键guid存储它并存储 只有sessionkey 在视图中作为隐藏输入

    实际上,它还可能取决于您将存储的数据量。

        3
  •  0
  •   Rex Morgan    15 年前

    听起来像taskgenerator.generatetask()会为您提供某种类型的任务,但该任务是否持久存在于任何地方?(此方法从何处获取任务)?

    如果有与任务相关联的ID,您可以在视图中向下发送该任务ID,然后在任务应答时再次向上查找该任务。然后,您可以从该任务中获取正确的答案并进行比较。