我的应用程序中有commonFields类。这是在线asp.net mvc简单测试/考试的应用。假设学生已使用他的证书登录。他得到了选择测试,然后说加载它。它会在某个控制器中加载测试,每个测试都有一组问题。现在有了这个测试ID我得到了那个特定测试的问题列表。并存储在公共类
中 public static List<Question> questionList;
对象。由于静电,它将与应用程序一样。但是如果同一时间其他学生登录并执行相同或不同的测试。然后他选择的测试问题将再次存储在questionList对象中(与上面相同)。
就像说100名学生进行测试一样。那么对questionList有什么影响?它总是需要实例化吗?在commonField类中?怎么管理这个?或者由于静态CLR会管理它吗?
答案 0 :(得分:5)
您应该将常用数据存储在Application
对象和Session
中的每个学生数据中。
在某些时候,每次会议一次:
Session["questions"] = CreateQuestionList();
然后在您需要的时候:
questionList = (List<Question>)Session["questions"] ;
您的static
变量不可靠,不会扩展到多个服务器,并且肯定不会为每个学生提供不同的questionList。
答案 1 :(得分:1)
作为静态字段,
对于所有登录的学生,questionList
应保持通用。因此,您必须为每个学生实例化一个新的QuestionsList实例,并将其存储在该学生的会话中。
答案 2 :(得分:1)
您需要在会话中输入用户的测试ID。不要尝试在类字段或其他任何内容中的用户请求之间保存对象状态。 此外,您还需要注意缓存 ASP.NET对象,以便快速访问上次加载的测试问题。
答案 3 :(得分:1)
您应该使用Session而不是将您的问题存储在静态字段中。
List<Question> questionList=new List<Question>();
//fill the list with your questions
Session["Questions"] = questionList;
然后,如果您需要当前学生的问题,请使用:
List<Question> questionList=(List<Question>)Session["Questions"];