2011-01-14 7 views
2

У меня есть страница aspx, где я хочу опубликовать значения на новой странице, а затем перенаправить на эту новую страницу. Я не получаю никаких ошибок и происходит перенаправление, но коллекция AllKeys всегда пуста.Почему коллекция Request.Form.AllKeys пуста после POST и перенаправления?

Вот пример моего кода:

Try 
    With strPost 
     .Append("User=" & strUserName) 
     .Append("&Session=" + strValue) 
    End With 

    Dim objRequest As Net.HttpWebRequest = _ 
     Net.WebRequest.Create("http://localhost:57918/testproject/test.aspx") 

    With objRequest 
     .Method = "POST" 
     .ContentType = "application/x-www-form-urlencoded" 
     .ContentLength = strPost.ToString().Length 
    End With 


    Dim objStream As IO.StreamWriter = _ 
       New IO.StreamWriter(objRequest.GetRequestStream()) 
    objStream.Write(strPost.ToString) 
    objStream.Close() 
    Catch ex As Exception 
     Debug.Print(ex.Message) 
     Exit Sub 
    End Try 

    Response.Redirect("http://localhost:57918/testproject/test.aspx") 

Я видел несколько статей, подобные этой проблемы, но ни один из них не помог. Что я делаю не так?

ответ

0

Код выше приведет к двум запросам к тому, чтобы http://localhost:57918/testproject/test.aspx

  1. Сам Посылает значения в URL веб-сервера. Когда страница будет выполняться в этот момент, коллекция AllKeys будет содержать значения, которые вы опубликовали.

  2. Веб-браузер клиента выполнит запрос GET на странице. Ничего не будет опубликовано. На этот раз ключи будут пустыми.

Чтобы передать параметры на другую страницу можно закодировать значения в перенаправлении URL:

Dim url as String = "http://localhost:57918/testproject/test.aspx" 
url = url + "?User=" + strUserName 
url = url + "&Session=" + strValue 
Response.Redirect(url) 

Значение затем будет доступно с помощью объекта запроса (например, Request["User"]).

обновление

Если вы не хотите, чтобы показать данные пользователя; то вы на самом деле только два других варианта:

  1. Перенести обработку, которая, проводимой test.aspx на страницу, которая была генерирующего исходный запрос.
  2. Сохранение User и Session определяет состояние сеанса.
+0

Причина, по которой я пытаюсь это сделать, заключается в том, что эти значения не видны пользователю, поэтому использование запроса не является вариантом. – Chris

+0

Мне удалось найти здесь возможное решение: http://www.codeproject.com/KB/aspnet/ASP_NETRedirectAndPost.aspx Я еще не тестировал, но это похоже на то, что мне нужно. – Chris

+0

@ Chris. Решение, с которым вы связались, полезно только в том случае, если веб-страница, в которую вы отправляете сообщения, является частью другого приложения. Если обе страницы являются частью одного и того же приложения, я настоятельно рекомендую вам просто записать значения в состояние сеанса и перенаправить (например, Session («Пользователь») = strValue) –

0

Почему бы вам просто не опубликовать ссылку на эту страницу напрямую на эту страницу?

Если процесс:

  1. Страница A оказана клиенту
  2. сообщения клиента обратно на страницу A
  3. страницу Код позади генерирует запрос на страницу B
  4. страницу Код позади переадресаций пользователю страницу B
  5. Страница B оказываемых клиенту

Затем между шагами 4 и 5 вы потеряете все параметры после. Вот как это работает.

Однако, вы можете сделать следующее:

  1. Page тонированного клиенту, с формой после набора действий на страницу B
  2. клиентов вводят данные и нажимает кнопку отправить
  3. Почтовых значения перейти на страницу B для обработки.

Другим путем будет страница A выполнить перенаправление и передать значения в строке запроса. Например, Response.Redirect("/PageB.aspx?param1=value&param2=value")

0

Если я правильно понял, вы ожидаете, что значения POST будут доступны в /testproject/test.aspx после перенаправления.

К сожалению, это не сработает. Когда вы выполняете WebRequest, это одноразовый пост. Создается новый запрос, который выполняет ваша страница, а затем завершается запрос, и все данные, связанные с этой страницей, будут отброшены.

Когда вы перенаправляете в конце приведенного примера, это совершенно новый запрос GET к новому экземпляру test.aspx. Данные вашего предыдущего запроса POST никогда не будут доступны.

Вы можете:

  1. Перенаправление на страницу и передать значения User и Session в строку запроса

  2. магазин User и Session в Session коллекции затем перенаправить

  3. If strUserName и strValue берутся из другого почтового отправления, вы можете использовать Server.Transfer, чтобы передать управление test.aspx и сохраните коллекции форм и запросов текущего запроса в текущем запросе.

Смежные вопросы