【发布时间】:2015-02-02 21:13:15
【问题描述】:
我正在 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 是此消息的最佳位置吗?
注意:我已经读到,如果您要对网络服务器进行负载平衡,则必须启用粘性会话。 Azure 是自动打开粘性会话还是需要手动配置?
【问题讨论】:
-
这是一个关于 Azure 和 Get 的好问题。为了安全起见,我倾向于将可选参数传递给 Redirect 方法,而不是使用 TempData。我很想看看其他人的帖子。
-
默认情况下 TempData 是基于会话的,但是您可以提供 TempDataProvider 的自定义实现,它可以将参数存储在 URL、Cookie 或其他地方
-
Neil,可选参数是否出现在 url 中?如果是这样,并且我为该网址添加了书签,那会不会导致每次打开该书签时都会显示“已成功保存”消息?
标签: asp.net-mvc tempdata