Server.transfer изменяет URL-адрес во второй раз

Я использую Asp.net 2.0. Я делаю server.transfer со страницы 1 на страницу 2. URL остается страницей 1. Теперь я нажимаю ссылку на странице 2, и я перехожу на страницу 3. Таким образом, URL должен оставаться страницей 1. Вместо этого браузер теперь отображает URL страницы 2. что ожидаемое поведение?

Я на самом деле пытался скрыть параметры из URL.

  1. Я не могу использовать response.redirect потому что я не могу получить доступ к предыдущей странице отсюда.
  2. Я попытался использовать PostBackUrl, но у меня это не сработает, потому что мне нужно сохранить данные на текущей странице, а затем показать следующую страницу, если ошибок не было. Если данные были неверны, и / или были ошибки, то мне нужно показать пользователю ту же страницу.
  3. Теперь я решил попробовать server.transfer, но это показывает URL предыдущей страницы.

Кто-нибудь может указать мне правильное направление?

1 ответ

Это ожидаемое поведение.

Когда вы используете Server.Transfer ASP.NET прекращает обработку исходного запроса через ThreadAbortException и затем немедленно, в том же потоке, начинает обработку нового запроса. Новый запрос запускается и отправляет свой вывод в браузер. Браузер ничего не знает о Server.Transfer, Все, что знает браузер, это то, что он запросил page1, и сервер отправил ему обратно некоторый контент, который, как вы знаете, разработчик на самом деле со страницы 2.

Postbacks - это место, где просачивается url page2, если он должен был быть скрыт. Чтобы контент страницы2 обрабатывал обратную передачу, он должен выполнить обратную передачу на страницу2. Если бы он отправил обратно на страницу1, страница1 не знала бы, что делать с событиями viewstate и form, поскольку они на самом деле генерируются страницей2. Чтобы достичь этого, <form> элемент, обслуживаемый page2, имеет action из page2, Посмотрите на ваш источник HTML в браузере после Server.Transferвы увидите это:

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm">

Используя традиционные веб-формы, единственный реальный способ полностью скрыть URL-адрес от пользователя состоит в том, чтобы не использовать постбэки, и чтобы все ссылки на странице2 фактически ссылались на страницу1 и добавляли всю логику на страницу1 для соответствующей обработки.

Кроме того, вы не могли бы использовать постбэки вообще. Если бы вы выполняли все действия через ajax, то URL-адрес браузера не изменился бы вообще, и вы в любом случае должны получить лучший опыт для пользователя.

Еще лучше было бы использовать ASP.NET MVC, который подталкивает вас к дружественным REST-подобным URL-адресам, которые очень просты для понимания пользователем и которые вы можете сопоставить с более сложными параметрами внутри.

Другие вопросы по тегам