Ошибка отслеживания в форме или в сеансе - PullRequest
0 голосов
/ 17 января 2012

Извиняюсь, если это классический ASP 101, но это было так давно, с тех пор как я сделал какой-либо ASP, я изо всех сил пытался понять / отследить эту ошибку. Что еще хуже, я унаследовал это приложение, и я не могу спросить оригинального автора ..

У меня есть корзина для покупок, которая включает в себя флажок ввода и множество других полей. Когда форма обрабатывается и отправляется, она запускается через некоторый JavaScript, а затем, если все в порядке, перенаправляется на другую страницу. (Ничего необычного там нет). Firebug показывает, что на данный момент значение флажка отличается в зависимости от его проверенного состояния.

Когда форма отправляется, она переходит на другую страницу, которая перебирает коллекцию session.Contents () и создает строку, отправляемую третьей стороне. Используя fiddler, кажется, что, хотя имя checkBox находится в этой строке, значение всегда 'on'

Из чтения Google я вижу, что коллекция session.Contents - это все параметры, которые были помещены в сессию / приложение. но grep для всех файлов в каталоге проекта нигде не появляется, если флажок добавлен в сеанс.

Итак, cb там просто потому, что он находится в форме или используется в javascript, или есть другие способы добавления переменной в сеанс. (Grep для имени не включает другие экземпляры).

И, во-вторых, если переменная находится в сеансе, независимо от того, как она туда попала, почему она всегда установлена ​​на «on». Я предполагаю, что каким-то образом он был добавлен в сеанс и установлен на Вкл до обработки формы. Но по умолчанию флажок снят, поэтому я в замешательстве!

Может ли кто-нибудь помочь объяснить это или даже предложить, как я могу отследить / исправить это. (Очевидный ответ - попытаться принудительно ввести его в сеанс с правильным значением, но я хотел бы знать, почему он ведет себя неправильно, а не просто игнорировать его в случае, если я снова что-то встретлю!

Спасибо

1 Ответ

0 голосов
/ 17 января 2012

Я предполагаю, что вы уже определили, что JavaScript не изменяет состояние флажка, чтобы разрешить отправку.

Когда ваша форма отправлена, отправленные поля находятся в форме Request.Form.коллекция.Если флажок не установлен, он не является частью коллекции Request.Form.Следовательно, в вашей коллекции Request.Form будет столько полей флажков, сколько вы отметили при отправке, и все они будут иметь значение своего соответствующего свойства "value".

Если вы добавите их вSession.Contents, они сохраняются до окончания сеанса.Если вы никогда явно не очищаете коллекцию Session.Contents, но отправляете форму более одного раза с разными значениями, коллекция Session.Contents будет продолжать накапливать все больше и больше пар (checkbox_name, checkbox_value) до тех пор, пока она не будет содержать (checkbox_name), checkbox_value) пара для каждого флажка в вашей форме.

Вы можете написать функцию, которая очищает каждое из ваших полей формы из сеанса, и вызывать ее либо после обработки формы, либо перед обработкой формы.(что имеет смысл для вашего приложения).Либо просто используйте коллекцию Request.Form.

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