是否可以仅为下一个请求添加变量?

时间:2012-04-02 20:27:02

标签: c# .net request

我想这样做:

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

    有没有这样做的机制?没有查询字符串系统......我知道.NET中有很多范围......

3 个答案:

答案 0 :(得分:3)

如果您正在使用ASP.NET MVC3,则会有一个特殊的集合,称为TempData。您放入的任何内容都可用于下一个请求,但不再适用。

对于网络表单,SO上有一个重复的问题:TempData Like Object in WebForms - Session State for only 1 Additional Request

答案 1 :(得分:3)

是的,可以做到。

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

答案 2 :(得分:0)

如果Response.Redirect没有一成不变,您可以使用Server.Transfer代替Page.PreviousPage直接访问第一页。

  

使用Transfer方法或使用跨页面发布进行传输时   从一个ASP.NET页面处理到另一个ASP.NET页面,即原始页面   包含可能需要的请求信息   目的地页面。您可以使用PreviousPage属性来访问它   信息。

     

如果由于直接请求而呈现当前页面   (不是从另一页转移或交叉发布),PreviousPage   property包含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"
    }
}