我有一个aspx页面,我想将值发布到新页面,然后重定向到该新页面。我没有收到任何错误,重定向发生但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 :(得分:0)
上面的代码会导致向http://localhost:57918/testproject/test.aspx
网络服务器本身将值发布到网址。当此页面运行时,AllKeys
集合将包含您发布的值。
客户端的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"]
)来获取这些值。
更新
如果您不想向用户显示数据;那么你真的只有两个选择:
test.aspx
正在执行的处理移至生成原始查询的页面。User
和Session
值保存为会话状态。答案 1 :(得分:0)
为什么不将主页直接发布到其他页面?
如果流程是:
然后在第4步和第5步之间,你将失去所有的后期参数。这就是它的工作原理。
但是,您可以执行以下操作:
另一条路径是让页面A执行重定向并传递查询字符串上的值。例如,Response.Redirect("/PageB.aspx?param1=value¶m2=value")
答案 2 :(得分:0)
如果我理解这一点,那么您希望重定向后POST
中的/testproject/test.aspx
值可用。
不幸的是,它不会像那样工作。当您执行WebRequest时,它是一次性的帖子。页面执行时会创建一个新请求,然后请求结束,并且将丢弃与该页面关联的所有数据。
当您在示例末尾重定向时,这是对GET
的新实例的全新test.aspx
请求。您之前请求的POST
数据永远不可用。
你可以:
重定向到该页面并传递查询字符串中的User
和Session
值
将User
和Session
存储在Session
集合中,然后重定向
如果strUserName
和strValue
来自其他回发,您可以使用Server.Transfer
将控件转移到test.aspx
,并保持当前请求的Form和QueryString集合不变。