1. 程式人生 > 實用技巧 >ASP.NET MVC之從控制器傳遞資料到檢視

ASP.NET MVC之從控制器傳遞資料到檢視

本系列開始著手講述ASP.NET MVC,也算是自己對基礎的回顧以及進一步深入學習,保證每天發表一篇該系列文章,關於基本知識則不再敘述,園子有關文章不勝列舉,這一系列若有敘述不當或錯誤之處,歡迎指出以及批評。

新建基本專案在Models資料夾下定義如下類:

 1  public class Person
 2     {
 3         public int Id { get; set; }
 4 
 5         public string Name { get; set; }
 6 
 7         public string BlogAddress { get; set
; } 8 9 public string Description { get; set; } 10 }

我們在控制器的Action方法中例項化此類:

1 var p = new Person()
2 {
3    Id = 98,
4    Name = "xpy0928",
5    BlogAddress = "http://www.cnblogs.com/CreateMyself",
6    Description = "出生非貧即貴,你我無能為力,後天若不加以努力趕之超之,又能怪誰呢!自己都靠不住不靠譜,又能靠誰呢!"
7 };

方式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。