ASP.NET MVC 跨頁數據呈現(TempData)

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變量值。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章