代码之家  ›  专栏  ›  技术社区  ›  queen3

用于错误请求的ASP.NET MVC tempdata

  •  1
  • queen3  · 技术社区  · 16 年前

    我使用tempdata在重定向期间保持modelstate(使用mvccontrib技术)。这很管用。但是,在极少数情况下,用户会中止请求,然后立即触发另一个请求(例如,快速单击另一个菜单项)。这会导致modelstate错误出现在该页上,而该页不属于该页。

    问题是tempdata存储在session中。这意味着,任何请求都可以获取它,例如,首先到达服务器的请求。

    有已知的解决方法吗?例如,将“目标页”与保存的模型状态一起保存在tempdata中。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Darin Dimitrov    16 年前

    在我看来 TempData 应该 只有 用于立即重定向的操作。例如:

    public ActionResult Index()
    {
        TempData["foo"] = "bar";
        return RedirectToAction("About");
    }
    
    public ActionResult About() 
    {
        var foo = TempData["foo"];
        return View();
    }
    

    应避免将某些内容存储到tempdata中并呈现视图:

    public ActionResult Index()
    {
        TempData["foo"] = "bar";
        // bad :-(
        return View("About");
    }
    

    使用session来实现您要查找的内容,或者添加一些唯一的id,以允许您标识正确的请求。

    另一种常用的技术 临时数据 是为了 serialize the model on the client (一种可视状态,如果你愿意的话)。

    推荐文章
    Chanh Tran  ·  TempData持久性
    9 年前