是否可以只为下一个请求放置一个变量

本文关键字:变量 一个 请求 下一个 是否 | 更新日期: 2023-09-27 18:29:51

我想这样做:

  1. 对服务器的简单请求
  2. 放置一个仅对下一个请求可见的变量
  3. 进行重定向(Response.redirect,不带任何查询字符串)
  4. 好吧,我将看到的页面是由前面的"请求"调用的:现在我将访问存储在点(2)的变量。变量现在将被销毁
  5. 任何其他请求都找不到该变量,直到我调用点(1)的同一页

有什么机制可以做到这一点吗?没有查询字符串系统。。。我知道.NET中有很多作用域…

是否可以只为下一个请求放置一个变量

是的,可以做到。

  1. 创建页面(如果使用MVC,则创建控制器操作)以接收数据。如果您使用的是HTTPGET请求,则键值对将出现在查询字符串上。如果使用HTTPPOST,则键值对将是POST数据(Forms)的一部分
  2. 收到键值对后,将数据存储在某个持久位置,例如会话或数据库
  3. 重定向到新页面
  4. 在新页面中,从持久存储中检索数据并进行处理

如果您使用的是ASP.NET MVC3,则有一个专门的集合,称为TempData。你在那里输入的任何内容都可以用于下一个请求,但不再可用。

对于web表单,这里有一个关于SO的重复问题:WebForms中的TempData Like Object-仅针对1个附加请求的会话状态

如果没有在stone中设置Response.Redirect,则可以使用Server.TransferPage.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"
    }
}