是否可以只为下一个请求放置一个变量
本文关键字:变量 一个 请求 下一个 是否 | 更新日期: 2023-09-27 18:29:51
我想这样做:
- 对服务器的简单请求
- 放置一个仅对下一个请求可见的变量
- 进行重定向(Response.redirect,不带任何查询字符串)
- 好吧,我将看到的页面是由前面的"请求"调用的:现在我将访问存储在点(2)的变量。变量现在将被销毁
- 任何其他请求都找不到该变量,直到我调用点(1)的同一页
有什么机制可以做到这一点吗?没有查询字符串系统。。。我知道.NET中有很多作用域…
是的,可以做到。
- 创建页面(如果使用MVC,则创建控制器操作)以接收数据。如果您使用的是HTTPGET请求,则键值对将出现在查询字符串上。如果使用HTTPPOST,则键值对将是POST数据(Forms)的一部分
- 收到键值对后,将数据存储在某个持久位置,例如会话或数据库
- 重定向到新页面
- 在新页面中,从持久存储中检索数据并进行处理
如果您使用的是ASP.NET MVC3,则有一个专门的集合,称为TempData
。你在那里输入的任何内容都可以用于下一个请求,但不再可用。
对于web表单,这里有一个关于SO的重复问题:WebForms中的TempData Like Object-仅针对1个附加请求的会话状态
如果没有在stone中设置Response.Redirect
,则可以使用Server.Transfer
和Page.PreviousPage
直接访问第一页。
当您使用转账方法或使用跨页过账进行转账时从一个ASP.NET页面处理到另一个,即原始页面包含可能需要的请求信息目标页面。您可以使用PreviousPage属性来访问信息
如果当前页面是作为直接请求的结果呈现的(不是从另一个页面转移或交叉发布),PreviousPage属性包含null。
例如,在第一页(RedirectForm.aspx)中:
public String Value { get; set; }
protected void BtnTransfer_Click(object sender, EventArgs e)
{
Value = "Foo";
Server.Transfer("Transfer.aspx");
}
在Transfer.aspx
:中
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
RedirectForm prev = (RedirectForm)Page.PreviousPage;
String prevValue = prev.Value; // "Foo"
}
}