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

ASP.NET MVC TempData 深度解析:儲存機制、生命週期、自訂 Provider 與訊息提示實作範例

     編輯:關於ASP.NET

前言

TempData 用於跨請求傳遞暫時資料(如重導向後的成功/錯誤訊息)。預設使用 Session 儲存,生命週期為「目前請求到下一個請求結束」。本文解析原始碼實作、自訂儲存提供者與實際應用範例。

TempData 核心原始碼邏輯(Preview 5)

  1. Load:請求開始時,從 Session 取出 TempData 並指派給 Controller.TempData,然後從 Session 移除。
  2. Save:請求結束時,將 Controller.TempData 內容存回 Session。

因此 TempData 僅在下一個請求可用,第二個請求結束後即被清除。

併發與儲存介質

  • 預設使用 Session → 天然隔離使用者,無併發問題。
  • 若改用資料庫儲存,必須處理併發(如鎖定機制)。
  • 參考:用 db4o 做 TempDataProvider(含泛型 RedirectToAction)。

實作:統一訊息提示基類

public class BaseController : Controller
{
    protected ActionResult ShowMsg(List<string> msgs)
    {
        TempData["Messages"] = msgs;
        return RedirectToAction("Message");
    }

    public ActionResult Message()
    {
        return View(TempData["Messages"] as List<string>);
    }
}

繼承 BaseController 後,在任何 Controller 即可:

public class AdminController : BaseController
{
    public ActionResult SaveSettings()
    {
        // ... 儲存邏輯
        return ShowMsg(new List<string> { "設定已成功儲存!" });
    }
}

Message.aspx View 顯示:

<% if (Model != null) { %>
    <ul>
    <% foreach (var msg in Model) { %>
        <li><%= msg %></li>
    <% } %>
    </ul>
<% } %>

結語

TempData 是實作 PRG 模式與跨請求訊息傳遞的關鍵機制。理解其 Session 儲存特性與生命週期,並封裝於基類中,能大幅提升開發效率與一致性。

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