none
Помощь в проектировании приложения RRS feed

  • Вопрос

  • Здравствуйте. Нуждаюсь в советах, как правильно разработать приложение. Суть приложения - соцопрос.

    Начинается опрос с выбора набора вопросов (каждый набор вопросов имеет свое имя в БД), список ID вопросов помещаю в массив и храню в сессии. Вопрос может быть с одним или многими вариантами ответов. Для реализации этой фигни я в Мультивьюшку поместил 2 Вьюшки. В одну вьюшку ЧекбоксЛист в другую РадиобаттонЛист (оба ссылаются на один и тот же ЛинкДатасурс который хранит ID и текст ответов для текущего вопроса). В зависимости от типа вопроса - показываю ту или иную вьюшку. По нажатию на кнопку "Далее" яваскриптом проверка на наличие отмеченных ответов. IDВопроса и IDПолученного ответа записываю в ещё одним массив и храню в сессии.  Затем у ЛинкДатаСурса меняю WhereParameters, чтоб он ссылался на набор ответов для следующего вопроса. И так получается прохожу по всем вопросам, отмечаю ответы - всё записывается в массив. В конце опроса появляется кнопка "Сохранить" и все данные из массива саписываются в БД.

    Проблема в том, что результаты опроса могут быть записаны в БД только в том случае если опрос был пройден полностью (если например посреди опроса юзер закрыл браузер и ушёл нафиг - такие результаты не должны храниться в БД). Поэтому записываю всё в массив и под конец уже скопом всё записываю в БД.

    Ещё одна проблема в том, что по нажатию на браузерную кнопочку "Назад" пользователю показывается вьюшка, с вариантами ответов (уже им отмеченными) для предыдущего вопроса. По идее он может их поменять - и нажать "Далее" чтобы изменить ранее отмеченные вопросы. Вот с этим я не знаю что делать.

    Господа, я не профессионал в программировании, поэтому прошу не пинать если где-то я придумал бред. Прошу помочь советами, мнениями, как бы Вы разработали такое приложение?

    Спасибо за внимание!

    24 ноября 2012 г. 9:24

Ответы

  • "Проблема в том, что результаты опроса могут быть записаны в БД только в том случае если опрос был пройден полностью (если например посреди опроса юзер закрыл браузер и ушёл нафиг - такие результаты не должны храниться в БД). Поэтому записываю всё в массив и под конец уже скопом всё записываю в БД." - проблемы тут нет. Я Вам предложил хранить данные в сессии, а под конец записывайте их в базу. Если пользователь покинул сайт, то данные сессии уничтожатся автоматически, через некоторое время, и ничего не будет записано.

    "Ещё одна проблема в том, что по нажатию на браузерную кнопочку "Назад" пользователю показывается вьюшка, с вариантами ответов (уже им отмеченными) для предыдущего вопроса. По идее он может их поменять - и нажать "Далее" чтобы изменить ранее отмеченные вопросы. Вот с этим я не знаю что делать." - эту проблему можете обойти легко. Например используя флаги:

    if (Session["QueryResult"] == null)
            Session["QueryResult"] = new Dictionary<int, List<int>>();
          else
          {
            var queryResult = Session["QueryResult"] as Dictionary<int, List<int>>;
            //Тут смотрите, есть ли ответ на вопрос или нет (т.е. уже ответили один раз).
            int queryId = 158; //ИД вопроса например.
            if (!queryResult.ContainsKey(queryId)) //Не содержит ответов
            {
              //Заносим варианты ответа, у Вас тут может быть друная коллекция.
              queryResult[queryId] = new List<int> { 1, 5 };
            }
          }

    • Изменено YatajgaEditor 24 ноября 2012 г. 10:13
    • Помечено в качестве ответа Boguyang 26 ноября 2012 г. 14:53
    24 ноября 2012 г. 10:11
    Модератор