前言
本系列開始着手講述ASP.NET MVC,也算是自己對基礎的回顧以及進一步深入學習,保證每天發表一篇該系列文章,關於基本知識則不再敘述,園子有關文章不勝枚舉,這一系列若有敘述不當或錯誤之處,歡迎指出以及批評。
前奏
新建基本項目在Models文件夾下定義如下類:
public class Person { public int Id { get; set; } public string Name { get; set; } public string BlogAddress { get; set; } public string Description { get; set; } }
我們在控制器的Action方法中實例化此類:
var p = new Person() { Id = 98, Name = "xpy0928", BlogAddress = "http://www.cnblogs.com/CreateMyself", Description = "出生非貧即貴,你我無能為力,后天若不加以努力趕之超之,又能怪誰呢!自己都靠不住不靠譜,又能靠誰呢!" };
方式1 (ViewData)
我們利用ViewData以鍵值對的形式來存儲上述實例化的對象,如下:
ViewData["Person"] = p;
在視圖中我們從ViewData中獲取存儲的值並轉換成對象,如下:
@using ASP.NET_MVC_1.Models; @{ var p = (Person)ViewData["Person"]; }
接着我們獲取對象中的值:
<h1>Person</h1> <h3>@p.Id</h3> <h3>@p.Name</h3> <h3>@p.BlogAddress</h3> <h3>@p.Description</h3>
我們來看看是否獲取到該對象的值,如下:
方式2(ViewBag)
將控制器Action方法以ViewBag創建動態表達式來進行,如下:
ViewBag.Person = p;
在視圖中,我們進行如下修改:
@using ASP.NET_MVC_1.Models; @{ var p = ViewBag.Person as Person; }
獲取對象值同上,我們繼續看看是否如我們所預想:
方式3(Model)
我們通過控制器中返回的View方法進行傳遞該對象,如下:
var p = new Person() { Id = 98, Name = "xpy0928", BlogAddress = "http://www.cnblogs.com/CreateMyself", Description = "出生非貧即貴,你我無能為力,后天若不加以努力趕之超之,又能怪誰呢!自己都靠不住不靠譜,又能靠誰呢!" }; return View(p);
此時視圖中,我們將需要得到該強類型對象:
@using ASP.NET_MVC_1.Models;
@model Person;
而獲取對象的值則通過Model來獲取,如下:
<h1>Person</h1> <h3>@Model.Id</h3> <h3>@Model.Name</h3> <h3>@Model.BlogAddress</h3> <h3>@Model.Description</h3>
毫無疑問結果依然如此:
方式4(TempData)
從字面意思來理解我們會誤認為是臨時對象,好像就使用一次就不會再用了,確實是這樣嗎?很顯然不是這樣,當然其生命周期確實很短。該對象是將數據從一個控制器的方法傳遞到另外一個方法上。什么意思呢?我們想象這樣一個場景:當我們在控制器的Info方法上添加一個Person的信息后,我們跳轉到另外一個方法TempDataObject上來顯示該對象已經成功被創建。
下面我們來演示這種場景:
public ActionResult Info() { var p = new Person() { Id = 98, Name = "xpy0928", BlogAddress = "http://www.cnblogs.com/CreateMyself", Description = "出生非貧即貴,你我無能為力,后天若不加以努力趕之超之,又能怪誰呢!自己都靠不住不靠譜,又能靠誰呢!" }; //TODO 添加Person到數據庫中 TempData["info"] = "提示:已經成功添加一條數據到數據庫中"; return RedirectToAction("TempDataObject"); }
創建一個TempData方法,獲取上面傳遞過來的值,如下:
public ActionResult TempDataObject() { return View(); }
在方法對應的視圖獲取傳遞過來的值:
<h1>@TempData["info"]</h1>
我們通過訪問Info,觀察當跳轉過來到該方法時后渲染視圖是否能夠獲取到該值:
當然在上述過程中這是利用將一個Action中的數據通過TempData傳遞到另外一個Action中,但是我們需注意,這是利用跳轉到TempDataObject才會正確顯示數據,如果我們直接刷新頁面將會出現System.NullReferenceException。
結語
關於其區別就不再敘述,園子中已有大量的總結,今天就到此為止。