2011-01-14 38 views
2

我有一個aspx頁面,我想將值發佈到新頁面,然後重定向到新頁面。我沒有收到任何錯誤,並且重定向發生,但AllKeys集合始終爲空。爲什麼在POST和重定向後Request.Form.AllKeys集合爲空?

這裏是我的代碼示例:

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. 的web服務器本身的POST值到url製成。當此頁面運行時,AllKeys集合將包含您發佈的值。

  2. 客戶端的Web瀏覽器將對該頁面執行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. UserSession保存爲會話狀態。
+0

我試圖這樣做的原因是這些值不會被用戶看到,所以使用查詢字符串不是一個選項。 – Chris 2011-01-14 18:40:27

0

爲什麼不直接將您的主頁發佈到其他頁面?

如果過程:

  1. 頁A呈現給客戶端
  2. 客戶端回發到頁A
  3. 網頁A碼後面生成網頁B的請求
  4. 頁面重定向後面A碼用戶頁面B
  5. 頁面B呈現給客戶端

然後,在步驟4和5之間,您將失去所有後續參數。這就是它的工作原理。

但是,你可以做到以下幾點:

  1. 第一個呈現給客戶,與表單POST操作設置網頁B
  2. 客戶輸入信息,並點擊提交
  3. 郵政值轉到頁面B處理。

另一種途徑是讓頁面A執行重定向並將值傳遞給查詢字符串。例如,Response.Redirect("/PageB.aspx?param1=value&param2=value")

0

如果我在理解此問題時是正確的,則表示在重定向後POST值可用於/testproject/test.aspx

不幸的是,它不會那樣工作。當您執行WebRequest時,這是一次性的帖子。一個新的請求被創建,你的頁面執行,然後請求結束,所有與該頁面相關的數據將被丟棄。

當您在示例結尾處重定向時,給出的是全新的GET請求到test.aspx的新實例。您以前的請求的POST數據將永遠不可用。

您可以:

  1. 重定向頁面,並在查詢字符串

  2. 商店UserSessionSession集合中通過UserSession值然後重定向

  3. 如果strUserNamestrValue來自另一個回發你可以使用Server.Transfer將控制轉移到test.aspx,並保持當前請求的Form和QueryString集合完好無損。