У меня есть страница, которая требует, чтобы пользователь прошел несколько шагов, однако шаг выполняется на той же странице 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-адрес второго шага, но без какого-либо перенаправления.
Будем очень благодарны за любые идеи.
Это будет немного сложнее, чем вы, вероятно, захотите, но вы можете добиться этого эффекта с помощью свойства PostBackUrl кнопки отправки. Я предполагаю, что каждая панель имеет свою кнопку "отправить", и все они могут использовать это свойство для "продвижения" процесса. Недостатком является то, что для доступа к представленным элементам управления вам необходимо использовать свойство Page.PreviousPage для доступа к любым элементам управления и их значениям.
Не могли бы вы преобразовать свои панели в шаги в Wizard?
Вы можете программно изменить свойство PostbackUrl
вашей кнопки "Далее" на каждом Page_Load
на основе значения строки запроса. Это немного странно, поскольку вы не сможете использовать стандартный обработчик событий для нажатия кнопки, и вам нужно будет использовать свойство PreviousPage
страницы, чтобы получить данные с предыдущей вкладки.
Я бы назвал это требование. Зачем кому-то нужно прыгать на средний шаг? Если это случай отображения прогресса пользователю, сделайте это на странице, а не в URL-адресе.
Проверьте server.transfer
Вы можете реализовать форму или ссылку на URL, чтобы ваши URL-адреса оказались
/член/регистрация/шаг1/
/член/регистрация/step2/
/член/регистрация/step3/
Для этого используйте
Метод HttpContext.RewritePath, который означает, что вы можете переписать /member/signup/step 1/to/member/signup.aspx?step=1, например. Пример здесь.
Я бы также использовал шаблон PRG (post request get), чтобы каждая следующая ссылка помещала данные формы этого шага на сеанс затем перенаправляет пользователя вверх по правильному следующему URL-адресу. это гарантирует, что пользователь сможет перемещаться вперед и назад по шагам безопасно, а также URL останется неизменным во всех ваших сообщениях.
Требуется, чтобы каждый шаг имел другой URL, чем Response.Redirect - единственный вариант. Поскольку вы хотите избежать перенаправления, вы можете использовать IFrame, но URL-адрес IFrame не отображается пользователю в его браузере. Я думаю, что опция перенаправления является уродливой (как для SERVER, так и для CLIENT), так как в этом случае вы сначала публикуете на странице и получаете эту страницу. Лучшим решением является POST BACK с некоторым шагом отслеживания переменных.