| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка под ASP.NET > Контролы и кнопка "Назад" |
| Автор: Nex 7.5.2007, 18:24 |
| Делаю опросник, логика работы - из базы вытаскивается текст вопроса и тип, создается нужный контрол (textarea, radiobuttongroup, пр...), пользователь отвечает на вопрос, нажимает кнопку "далее", на onClick его ответ сохраняется в базу и вытаскивается следующий вопрос. Все работает, но если человек ответит на вопрос, нажмет "Далее", ему отрисуется второй вопрос, а он нажмет у себя в браузере на конопочку "Назад", и еще раз ответит на первый вопрос, то я у себя на сервере все-равно вижу контролы, сгенерированные для второго вопроса - ID вопроса и прочее. Т.е. получается что человек вроде как ответил на 2й вопрос, нажав на кнопку "Далее" на странице первого. Вообщем-то получается что контролы берутся не из сгенерированного хтмл'а, а хранятся на сервере (как бы в сессии) - по крайней мере частично? Существуют ли какие-то стандартные методы защиты от такой ситуации, т.к. она, по-моему, должна быть довольно таки распространенной?.. |
| Автор: Pankon 7.5.2007, 18:55 |
думаю поможет javascript, который "не дает" писать в history смотри http://forum.vingrad.ru/index.php?showtopic=112202&view=findpost&p=856605 |
| Автор: Mymik 7.5.2007, 18:57 |
| А что ты используешь для отрисовки всех этих контролов и нажатия на кнопки "Далее". Wizard ??? Добавлено через 9 минут и 28 секунд Народ, я глючу или как. Вообще JavaScript History возвращает браузер на предыдущий URL отличный от данного URL. Правильно ??? Следовательно, если у нас разные URL адреса, то можно сделать вывод, что и событие хочешь ты того или нет, но события будут разные, ну и страницы тоже разные, ведь URL страниц разные. Следовательно возникает следующий вопрос к топик стартеру -- А как ты генерируешь вопросы, что ты и где хранишь ??? |
| Автор: dazy 7.5.2007, 19:50 | ||
Может имеет смысл запретить кеширование страницы?
|
| Автор: Nex 10.5.2007, 11:51 |
| Pankon, dazy, это все-равно проблему не решит. Человек может просто сохранить страницу к себе на комп и пр. Mymik, визард не использую, URL остается тем же. У меня страница генерируется полностью динмаически, я получаю следующий вопрос, в зависимости от его типа создаю нужный контрол. В контроле хранится ID вопроса. Страница всегда test.aspx без всяких параметров. По onClick на кнопке "Ответить" я беру из контрола ID вопроса и текст ответа. Т.е. если бы при возврате "Назад" я бы получал ID старого вопроса меня бы все устраивало, а сейчас получается что ID вопроса новый, а отвечает человек еще раз на старый вопрос... |
| Автор: Mymik 10.5.2007, 20:44 |
| Nex, а как он тогда нажимает назад ??? я просто не понимаю механизма попадания на предыдущий вопрос... Возможно поможет такая штука как Response.Redirect страницы саму на себя. Тогда по нажатию F5 или Ctrl+R на сервере не сработает предыдущие событие. Возможно тебе это как раз и нужно... Если это не то, то расскажи что за кнопка "назад" ??? Если это кнопка браузера, AFAIK так это ж опять таки возврат на страницу с URL отличным от данной страницы. А можешь привести пример кода (выципи строчки) Где ты генерируешь контролы. Т.е. как ты их генерируешь... может быть собака зарыта там. И желательно где ты хранишь данные из СУБД. Как ты определяешь последующий вопрос ??? |
| Автор: Mymik 11.5.2007, 08:44 |
| Если они хранятся где-то в Сессии, то лучше даже не в сессии их хранить, а в CommandArgument кнопки и запрашивать их значение из этого параметра кнопки. |
| Автор: kedicik 12.5.2007, 14:01 |
| Я делаю так. В динамическом контроле есть поле невидимое для тестируемого. Оно содержит идентификатор вопроса из БД. Каждый раз при загрузке динамического контрола оно соответстует данному вопросу. В динамическом контроле я вывожу ответы для данного вопроса. в зависимости от типа вопроса эти контролы разные соответственно. Поэтому если нажать на кнопку Назад из броузера то идент. вопроса считается из этого поля. И никаих заморочек не будет. Я сама делала в точности такой вопросник. И эта кнопка меня напрягала. Но особенно когда я даю возможность посмотреть результат тестируемому а он опять по этой кнопке хочет переопределить свои ответы. Тут еще хуже было. Вроде в БД я занесла его оценку а он по новой хочет исправить ее а этого нельзя ему! Вот тут я запоминала в сессии переменную. И тогда проверяла смотрел он свой результат или нет. И по кнопке назад выдавала ему что он уже не может изменить свой результат. Не знаю правильно или нет. Но другого выхода не нащла |