Обратная передача ASP.NET и URL-адреса - PullRequest
2 голосов
/ 20 января 2010

У меня есть страница, которая требует от пользователя выполнить несколько шагов, однако шаг выполняется на той же странице ASPX с отображением разных панелей.

Однако это требование, чтобы каждый шаг имел свой URL, это может быть простой параметр строки запроса, например:

Шаг 1: /member/signup.aspx?step=1

Шаг 2: /member/signup.aspx?step=2

Шаг 3: /member/signup.aspx?step=3

Однако я не хочу перенаправлять пользователя на новый URL каждый раз, когда они переходят к следующему шагу, это потребует большого количества перенаправлений, а также оператора switch при загрузке страницы, чтобы определить, на каком этапе пользователь включен

Было бы лучше, если бы я мог изменить URL-адрес, который отображается пользователю, когда исходный запрос отправляется обратно пользователю, т.е. пользователь нажимает «далее» на шаге 1, затем страница выполняет некоторую обработку и затем изменяет ответ так что пользователь увидит URL-адрес шага 2, но без перенаправления.

Любые идеи будут с благодарностью.

Ответы [ 6 ]

2 голосов
/ 20 января 2010

Не могли бы вы преобразовать свои панели в шаги в Мастер элемент управления?

0 голосов
/ 20 января 2010

Вы можете реализовать переписывание формы или URL, чтобы ваши URL в конечном итоге были

/ член / регистрация / step1 /

/ член / регистрация / step2 /

/ член / регистрация / step3 /

Для этого используйте

Метод HttpContext.RewritePath, который означает, что вы можете, например, переписать / member / signup / step1 / в /member/signup.aspx?step=1. Смотрите пример здесь .

Я бы также использовал шаблон PRG (пост-запрос получения), чтобы каждая следующая ссылка отправляла данные формы этого шага в сеанс, а затем перенаправляла пользователя на правильный следующий URL-адрес. это гарантирует, что пользователь может безопасно перемещаться по шагам назад и вперед, а также URL останется неизменным во всех ваших сообщениях.

0 голосов
/ 20 января 2010

Требуется, чтобы каждый шаг имел другой URL, чем Response.Redirect - единственный вариант. Поскольку вы хотите избежать перенаправления, вы можете использовать IFrame, но URL IFrame не виден пользователю в его браузере. Я думаю, что опция перенаправления уродлива (как для СЕРВЕРА, так и для КЛИЕНТА), так как в этом случае вы сначала публикуете на странице, а затем получаете эту страницу. Лучшее решение - POST BACK с некоторым изменяемым шагом отслеживания.

0 голосов
/ 20 января 2010

Вы можете программно изменять свойство PostbackUrl вашей кнопки «Далее» на каждом Page_Load в зависимости от значения строки запроса. Это немного странно, поскольку вы не сможете использовать стандартный обработчик событий для нажатия кнопки, и вам придется использовать свойство PreviousPage страницы, чтобы получить данные с предыдущей вкладки.

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

0 голосов
/ 20 января 2010

Это будет немного сложнее, чем вы, вероятно, хотите, но вы можете добиться этого эффекта с помощью свойства PostBackUrl кнопки отправки. Я предполагаю, что у каждой панели есть своя собственная кнопка «отправить», и все они могут использовать это свойство для «продвижения» процесса. Недостатком является то, что для доступа к отправленным элементам управления вам необходимо использовать свойство Page.PreviousPage для доступа к любым элементам управления и их значениям.

0 голосов
/ 20 января 2010

Проверить сервер.трансфер

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