首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC ViewData 與 TempData 差異解析:生命週期、跨請求保留與 Redirect 導向用法

     編輯:關於ASP.NET

前言

ASP.NET MVC 提供 ViewData 與 TempData 兩種字典集合,用於 Controller 向 View 傳遞資料。兩者生命週期不同,適用情境亦異。

程式碼範例

Controller 實作

public class EiceController : Controller
{
    public void Index()
    {
        ViewData["ViewData"] = "在這裡顯示 ViewData";
        TempData["TempData"] = "在這裡顯示 TempData";
        RenderView("Index");
    }
    public void Index2()
    {
        RenderView("Index");
    }
}

View 顯示

<%= ViewData["ViewData"] %><br />
<%= TempData["TempData"] %>

實測結果比較

請求網址ViewData 顯示TempData 顯示
/Eice/Index在這裡顯示 ViewData在這裡顯示 TempData
/Eice/Index2(空白)在這裡顯示 TempData

核心差異總結

| 特性 | ViewData | TempData | |------|----------|----------| | **生命週期** | 僅目前 Action/請求有效 | 保留到下一個請求結束 | | **儲存機制** | 記憶體字典 | 預設使用 Session 儲存 | | **典型用途** | 同一請求內 Controller→View 傳值 | 跨重導向傳遞暫時訊息(如錯誤、成功提示) | | **類比** | Request 範圍 | 類似 MonoRail 的 Flash / 一次性 Session |

Redirect 導向方法

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 則專注於單一請求的資料呈現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved