ASP.NET MVC 提供 ViewData 與 TempData 兩種字典集合,用於 Controller 向 View 傳遞資料。兩者生命週期不同,適用情境亦異。
public class EiceController : Controller
{
public void Index()
{
ViewData["ViewData"] = "在這裡顯示 ViewData";
TempData["TempData"] = "在這裡顯示 TempData";
RenderView("Index");
}
public void Index2()
{
RenderView("Index");
}
}
<%= ViewData["ViewData"] %><br />
<%= TempData["TempData"] %>
| 請求網址 | ViewData 顯示 | TempData 顯示 |
|---|---|---|
| /Eice/Index | 在這裡顯示 ViewData | 在這裡顯示 TempData |
| /Eice/Index2 | (空白) | 在這裡顯示 TempData |
RedirectToAction("About"); // 同 Controller
RedirectToAction("About", "Home"); // 跨 Controller
RedirectToAction(routeValues); // 使用 RouteValueDictionary
// 範例:建立 RouteValueDictionary
var routeData = new RouteData();
routeData.Values.Add("Action", "About");
routeData.Values.Add("Controller", "Home");
RedirectToAction(routeData.Values);
也可直接使用傳統 Response.Redirect。
善用 TempData 實作 PRG (Post-Redirect-Get) 模式,避免重新整理重複提交;ViewData 則專注於單一請求的資料呈現。