ASP.NET MVC TempData同ASP.NET MVC ViewData一樣,是在Controllers中聲明的變量以便在Views中進行調用,示例代碼如下所示。
[HandleError]
public class BetaController : Controller
{
public ActionResult Index()
{
TempData["beta"] = "TempData字符串";
return View();
}
}
上述代碼在Controllers中聲明瞭TempData,在Views中的相應頁面可以使用此TempData進行變量的輸出,示例代碼如下所示。
<%@ Page
Language="C#"
AutoEventWireup="true" CodeBehind="Beta.aspx.cs" Inherits="_17_1.Views.Beta.Index" %>
<h2>About Us</h2>
<p>
<%=TempData["beta"] %>
</p>
上述代碼呈現了TempData變量的值,運行後如圖17-21所示。
在數據呈現上,TempData變量同ASP.NET MVC ViewData基本相同,但是TempData能夠在跳轉中保存值。當用戶訪問一個頁面時,該頁面的Controllers中包含TempData變量。當這個頁面通過Redirect跳轉到另一個頁面時,另一個頁面能夠使用跳轉頁面的TempData變量。在跳轉頁面中,在跳轉前可以編寫TempData變量保存相應的值,示例代碼如下所示。
[HandleError]
public class BetaController : Controller
{
public ActionResult Index()
{
TempData["Index"] = "這是跳轉頁面的字符串哦.."; //編寫TempData
Response.Redirect("/Beta/Get"); //頁面跳轉
return View(); //返回視圖
}
}
上述忽代碼編寫了一個TempData變量並將頁面跳轉到Get.aspx,這裏在Beta文件夾下創建一個Get.aspx頁面讀取相應的TempData變量的值。創建完成後,編寫HTML代碼如下所示。
<%@ Page
Language="C#"
AutoEventWireup="true" CodeBehind="Get.aspx.cs" Inherits="_17_1.Views.Beta.Get" %>
<h2>接受傳遞的參數</h2>
<p>
<%=TempData["Index"] %>
</p>
編寫了頁面代碼後還不能對頁面進行訪問,由於MVC編程模型中路徑是訪問的Controller中的方法,所以還需要在Controller中實現Get頁面的方法,示例代碼如下所示。
public ActionResult Get()
{
return View(); //返回默認視圖
}
上述代碼返回默認視圖,當不給View方法進行參數傳遞,將會返回與方法同名的.aspx頁面文件。這裏沒有對View方法傳遞參數,則返回的是Get.aspx頁面視圖,當用戶訪問/Beta/路徑時,代碼會創建一個TempData變量並跳轉到/Beta/Get路徑,在/Beta/Get路徑相應的文件中可以獲取跳轉前的TempData變量的值,運行後如圖17-22所示。
在Get.aspx頁面相應的實現代碼中並沒有聲明任何的TempData變量,而是在跳轉前的頁面中聲明的TempData變量,與ViewData相比跳轉後的頁面能夠獲取TempData變量的值而不能獲取ViewData的值,這在某些應用場合如拋出異常等情況下非常適用。
注意:TempData變量在跳轉中能夠跨頁面進行數據讀取,但是跨頁面跳轉後TempData變量只能呈現一次。簡單的說就是跳轉的第一次能過獲取跳轉前頁面的TempData變量的值,而再次操作時就無法使用跳轉前頁面的TempData變量值。