оформление про "статическое" поле в c # - PullRequest
1 голос
/ 01 февраля 2011

В моем приложении есть класс commonFields.Это онлайн-приложение asp.net MVC простого теста / экзамена.Предположим, студент вошел в систему с его учетными данными.он получил выборочный тест и сказал загрузить it.it загрузит тест в некотором контроллере, каждый тест имеет множество вопросов.теперь с этим идентификатором теста я получаю список вопросов этого конкретного теста.и хранится в объекте

 public static List<Question> questionList; 

класса общего поля.из-за статики это будет так, как для приложения.но если в это же время в систему войдет другой студент, который проведет такой же или другой тест.тогда вопрос выбранного теста снова будет сохранен в объекте QuestionList (как описано выше).

То же самое, как, скажем, сотня студентов, выполняющих тест.тогда как это повлияет на вопросник?это всегда нужно будет создавать экземпляры?в классе commonField?как это сделать?или из-за статического CLR справится?

Ответы [ 4 ]

5 голосов
/ 01 февраля 2011

Общие данные следует хранить в объекте Application, а данные на каждого учащегося - в Session.

В определенный момент, один раз за сеанс:

  Session["questions"] = CreateQuestionList();

и затем всякий раз, когда вам это нужно:

   questionList = (List<Question>)Session["questions"] ;

Ваша переменная static ненадежна, не будет масштабироваться до нескольких серверов и, конечно, не позволит использовать разные списки вопросов для каждого студента.

1 голос
/ 01 февраля 2011

Вы должны использовать Session вместо хранения ваших вопросов в статических полях.

List<Question> questionList=new List<Question>();
//fill the list with your questions
Session["Questions"] = questionList;

Тогда, если вам нужны вопросы текущего студента, используйте это:

List<Question> questionList=(List<Question>)Session["Questions"];
1 голос
/ 01 февраля 2011

Вам необходимо указать идентификатор теста для пользователя в Session . Не пытайтесь сохранить состояние объекта между запросами пользователей в полях класса или чем-то еще. Также вам нужно обратить внимание на объект Cache ASP.NET для быстрого доступа к последним загруженным вопросам для тестов.

1 голос
/ 01 февраля 2011

Будучи статическим полем,

questionList

должно оставаться общим для всех учащихся, которые вошли в систему. Поэтому вы должны создать новый экземпляр QuestionList для каждого учащегося и сохранить его в сеансе учащегося.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...