【问题标题】:Scope of HttpContext.Current.Items in ASP.NET MVC 2ASP.NET MVC 2 中 HttpContext.Current.Items 的范围
【发布时间】:2011-05-10 06:03:04
【问题描述】:

嗨 在一个动作中,我设置了HttpContext.Current.Items.Add(...)。现在我正在重定向到同一个控制器中的另一个动作。我无法获取当前的 HttpContext。

这不可能。是否有解决此问题的方法,而不是使用临时数据。

【问题讨论】:

    标签: .net asp.net asp.net-mvc-2 httpcontext


    【解决方案1】:

    HttpContext 仅在当前 HTTP 请求期间可用。如果您重新编辑到另一个操作,那就是浏览器使用另一个 HttpContext 发送的另一个 HTTP 请求。如果您想在请求之间保留数据,您可以使用 TempData(仅适用于 1 个重定向)或 Session。在幕后 TempData 使用会话作为存储,但它在重定向后被框架自动驱逐。

    TempData 示例:

    public ActionResult A()
    {
        TempData["foo"] = "bar";
        return RedirectToAction("B");
    }
    
    public ActionResult B()
    {
        // TempData["foo"] will be available here
        // if this action is called after redirecting
        // from A
        var bar = TempData["foo"] as string;
    
        // TempData["foo"] will no longer be available in C
        return RedirectToAction("C");
    }
    

    会话示例:

    public ActionResult A()
    {
        Session["foo"] = "bar";
        return RedirectToAction("B");
    }
    
    public ActionResult B()
    {
        var bar = Session["foo"] as string;
        // Session["foo"] will still be available in C
        return RedirectToAction("C");
    }
    

    【讨论】:

    • 感谢您的回复。同时,我也仅尝试使用 tempdata。我对新请求的创建有疑问。搞清楚了再次感谢您。
    • Darin 从 ASP.NET MVC 2 开始,我认为 TempData 在 Session 中持续存在直到被读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2016-01-28
    相关资源
    最近更新 更多