Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Как сделать, чтобы страничка обновлялась правильно


Автор: vlsaf 28.2.2008, 17:55
Юзер отправляет заяву при этом автоматом перемещается на новую страницу.
На этой новой страницы ему пишется.

Ваша заява принята под номером таким-то.

Если теперь юзер нажимает в IE обновить страничку, то 
IE дает предупреждение, что данные  еще раз будут отправлены
при этом номер заявы увеличивается на 1.
Т.о. одинаковых заяв можно наплодить туеву хучу.

Как это можно загасить.
Я тут видел, что надо страницу как-то на себя замкнуть, но не понимаю, как это делается.

Подскажите плизз.

Автор: Mymik 28.2.2008, 19:28
Замыкание страницы самой на себя делается через.
Код

Response.Redirect()

Есть еще метод цифровой подписи Request'а. Он описан в книге Экспозито. 

Автор: vlsaf 28.2.2008, 22:23
Вот в том то и вопрос. А где Response.Redirect() вставить?
Если в Page_Load() , то пойдет бесконечный цикл.

Мне думается, что для меня этот вариант не подходит.
..................................................................................................

Нашел вот это
Код

Response.CacheControl = "no-cache"; 
Response.AddHeader("Pragma", "no-cache"); 
Response.Expires = -1; 
Response.AddHeader("Cache-Control", "no-cache");


На сколько целесообразно такой код использовать и есть ли подводные камни?

Автор: vlsaf 29.2.2008, 00:03
Цитата(Mymik @ 28.2.2008,  19:28)
Есть еще метод цифровой подписи Request'а. Он описан в книге Экспозито.

У Экспозито 2 книги:
1. Базовый курс
2. Углубленное изучение. 



В какой именно смотреть?

Автор: Mymik 29.2.2008, 10:25
Цитата(vlsaf @  28.2.2008,  22:23 Найти цитируемый пост)
Нашел вот это
Код

Response.CacheControl = "no-cache"; 
Response.AddHeader("Pragma", "no-cache"); 
Response.Expires = -1; 
Response.AddHeader("Cache-Control", "no-cache");

Нет, тебе это не поможет. Когда ты нажимаешь F5 или Ctrl+R браузер выполняет последнею операцию. Т.е. когда ты делаешь Response.Redirect то при вышеуказанных командах браузер выполняет код 201 и переадресует пользователя опять.


Цитата(vlsaf @  28.2.2008,  22:23 Найти цитируемый пост)
Вот в том то и вопрос. А где Response.Redirect() вставить?
Если в Page_Load() , то пойдет бесконечный цикл.
Обычно это ставится после того как данных были вставлены или удалены. Т.е. в обработчике события вставки, после непосредственнй вставки, ты делаешь Response.Redirect на страницу и туда просто можешь добавить get параметр типа id а когда ты поподаешь на страницу
Цитата(vlsaf @  28.2.2008,  17:55 Найти цитируемый пост)
Ваша заява принята под номером таким-то.
То ты просто считываешь этот ID из Request и вводишь туда куда тебе необходимо было.

Добавлено через 3 минуты и 17 секунд
Да, забыл случайно
Цитата(vlsaf @  29.2.2008,  00:03 Найти цитируемый пост)
У Экспозито 2 книги:
1. Базовый курс
2. Углубленное изучение. 
В какой именно смотреть? 
На сколько я помню это было в углубленном курсе. Но ИМХО, это очень геморойных способ...

Автор: vlsaf 29.2.2008, 10:50
На странице 1 (где вставляется запись)

1. Добавление записи
2. Тут же получение ID добавленой записи
3. переход на страницу 2 с передачей ID 
Код

Context.Items.Add("id", ID.ToString());
Server.Transfer("~/Ok.aspx");

При обновлении страницы Ok.aspx происходит повторная отправка данных.

Ты предлагаешь пользоваться обычным
Код

Response.Redirect("~/Ok.aspx");

Подскажи, как в этом случае передать get параметр ID ?
Еще не передавал. Какой должен быть синтаксис?

И как этот параметр считать на странице Ok.aspx?

Автор: Mymik 29.2.2008, 11:17
Передать параметр get так вот -->>
Код

Response.Redirect(String.Format("~/ok.aspx?id={0}&temp=temp&bla=777", ID));

Т.е. первый параметр идет через "?" а все остальные через "&" (это если понадобится передавать несколько параметров).

Чтобы забрать данные на следующей странице можно использовать два способа -->>
Код

Request.QueryString["id"]; /* первый */
Request["id"]; /* второй */
Первый от второго отличается лишь тем, что в первом ты будешь получать параметры только из GET коллекции, а во втором ты получаешь и из GET и из POST. первый и второй способ возвращает строку. На сколько я помню, ключи в данном случаи регистронезависимые, потому как разные браузеры могут по разному писать url (некоторые сохраняют регистр, некоторые не сохраняют).
Если ты будешь использовать пришедшие параметр в програмных целях (допустим забор данных из БД или еще чего), то помни, что все что пришло от пользователя является злом smile

Добавлено через 4 минуты и 49 секунд
да, если вдруг будет несколько одинаковых параметров, к примерну "ok.aspx?id=7&id=8&id=9" то при получении этих параметров на сервере, ты получишь строку "7,8,9" т.е. параметры разделяются запятыми.
Все, пожалуй все что пришло в голову мне smile

Автор: Sirius_UZ 3.3.2008, 14:01
Если кому еще надо http://www.microsoft.com/Rus/Msdn/publish/articles/AspCreating.mspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)