TempData是保存成功/失败消息的最佳位置吗?

时间:2015-02-02 21:13:15

标签: asp.net-mvc tempdata

我在Azure网站中实施ASP.NET MVC post/redirect/getpattern。当用户创建新实体时,他们会从创建视图重定向到编辑视图,并将新对象ID作为URL的一部分。

该实体拥有相当多的字段,因此多次保存并向用户保证他们的数据正在保存并且我们正在显示已成功保存的字段并不罕见'使用javascript的消息。

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Branch branch, int orgs)
    {
        if (ModelState.IsValid)
        {
            // model is valid, save it and redirect to edit
            _branchRepository.Save(branch);
            TempData["Message"] = new NotificationViewModel(NotificationSeverity.Success, 
                                  "Saved", 
                                  "Saved successfully");
            return RedirectToAction("Edit", new { id = branch.Id });
        }

        // model is invalid, don't save it, let them have another go
        TempData["Message"] = new NotificationViewModel(NotificationSeverity.Warning, 
                              "I'm sorry, Dave.", 
                              "I'm afraid I can't do that.");
        ModelState.Clear();
        return View("Edit", branch);
    }  

我对TempData的理解是,TempData中存储的任何数据都将在当前请求和下一个请求的生命周期内(或直到明确删除该项),并且是放置您希望传递的数据的最佳位置查看您将重定向到。

TempData是此消息的最佳位置吗?

注意:我已经读过,如果您要对您的网络服务器进行负载平衡,则必须启用Sticky Sessions。 Azure是自动打开Sticky Sessions还是需要手动配置?

1 个答案:

答案 0 :(得分:1)

在TempData中使用PRG模式时,在请求之间存储验证消息是我认为最常用的TempData。此外,如果返回Redirect结果,并且如果在Get阶段返回视图,则可以编写一些动态过滤器,这些过滤器将自动将所有模型状态存储在tempdata中,并将该数据从tempdata移动到modelstate / viewstate。

MVC Contrib中有两个这样的过滤器: http://mvccontrib.codeplex.com/SourceControl/latest#src/MVCContrib/Filters/ModelStateToTempDataAttribute.cs http://mvccontrib.codeplex.com/SourceControl/latest#src/MVCContrib/Filters/TempDataToViewData.cs

存储在TempData中的数据在读取请求结束后被删除,直到您调用TempData.Keep(key)