隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前兩篇文章... ...
隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前兩篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及ASP.NET Core MVC的命名約定,創建控制器,視圖,模型,接收參數等內容,今天繼續講解ASP.NET Core MVC 數據傳遞到客戶端等相關內容,僅供學習分享使用。
概述
在ASP.NET Core MVC項目中,控制器傳遞數據到視圖,常見的有以下幾種方式:
- ViewData,一個Key/Value鍵值對集合,通過ViewData可以方便的進行數據對象的存儲和獲取,只是ViewData獲取的對象的object類型,主要進行一定的類型轉換。
- ViewBag,一定dynamic類型對象,需要在運行時進行解析操作。
- Model模型,對於強類型視圖,不僅可以通過模型接收參數,也可以回傳數據。
- TempData,支持頁面跳轉數據傳遞。但也只支持一次頁面跳轉數據傳遞。
ViewData
ViewData是控制器中一個ViewDataDictionary類型的屬性,用來存儲Key/Value的字典集合,在控制器中可以直接使用。
ViewData特征
ViewData具有以下特征:
- ViewData是一個繼承自ViewDataDictionary類的Dictionary對象,用來從Controller向對應的View傳遞值。
- ViewData的只在當前當前的請求中有效,生命周期和View相同,其值不能在多個請求 中共用。
- 在重定向(redirection)後,ViewData中存儲的變數值將變為null。
- 在取出ViewData中的變數值是,必須進行合適的類型轉換(隱式或顯式)和空值檢查。
ViewData示例
通過ViewData傳值,首先在控制器中對ViewData賦值,如下所示:
1 /// <summary> 2 /// ViewData 3 /// </summary> 4 /// <returns></returns> 5 public IActionResult Test() 6 { 7 ViewData.Add("Name", "公子小六"); 8 ViewData.Add("Age", 20); 9 return View(); 10 }
在視圖中,對ViewData中的值進行獲取,在Test.cshtml中格式為@ViewData[Key],如下所示:
1 <h1>歡迎公子小六</h1> 2 <div> 3 <span>姓名:</span> 4 <span>@ViewData["Name"]</span> 5 </div> 6 <div> 7 <span>年齡:</span> 8 <span>@ViewData["Age"]</span> 9 </div>
運行測試,在瀏覽器中輸入【https://localhost:7116/Hello/Test】,如下所示:
ViewBag
ViewBag是一個動態類型變數(dynamic),這是C# 4.0引入的新特性,變數類型會在運 行時進行解析。
ViewBag特征
ViewBag具有以下特征:
- ViewBag基本上是ViewData的包裝,也是用來從Controller向View來傳遞值的。
- ViewBag也只在當前的請求中有效。
- 在重定向(redirection)後,ViewBag中存儲的變數值將變為null。
- 因為ViewBag是動態類型,所以我們在取得其值時,不需要進行類型轉換。
ViewBag示例
在ASP.NET Core MVC項目中,首先在控制器中對ViewBag進行賦值,如下所示:
1 public IActionResult Test2() 2 { 3 ViewBag.Name = "公子小六"; 4 ViewBag.Age = 23; 5 return View(); 6 }
在視圖中對ViewBag中的值進行獲取,格式為:ViewBag.屬性名 。如下所示:
1 @{ 2 var name = ViewBag.Name; 3 var age = ViewBag.Age; 4 name = name + "A"; 5 age = age + 1; 6 } 7 <h1>歡迎公子小六</h1> 8 <div> 9 <span>姓名:</span> 10 <span>@ViewBag.Name</span> 11 </div> 12 <div> 13 <span>年齡:</span> 14 <span>@ViewBag.Age</span> 15 </div> 16 <div> 17 <span>姓名:</span> 18 <span>@name</span> 19 </div> 20 <div> 21 <span>年齡:</span> 22 <span>@age</span> 23 </div>
運行測試,在瀏覽器中,輸入網址【https://localhost:7116/Hello/Test2】,如下所示:
模型數據
在ASP.NET Core MVC項目中,模型的主要作用就是在控制器和視圖之間進行數據交互,用來傳遞數據也非常簡單,如下所示:
創建模型
如果要用模型進行數據交互,首先是要創建模型,創建方法在前一篇文章中有介紹,不再贅述,示例模型類如下所示:
1 public class Student 2 { 3 /// <summary> 4 /// 唯一標識 5 /// </summary> 6 public int Id { get; set; } 7 8 /// <summary> 9 /// 學生名稱 10 /// </summary> 11 public string Name { get; set; } 12 13 /// <summary> 14 /// 學生年齡 15 /// </summary> 16 public int Age { get; set; } 17 18 /// <summary> 19 /// 學生性別 20 /// </summary> 21 public string Sex { get; set; } 22 }
控制器實例化模型
在控制器中對模型進行實例化,然後調用View(model)方法,如下所示:
1 public IActionResult Index() 2 { 3 var student = new Student() 4 { 5 Id = 1, 6 Name = "公子小六", 7 Age = 21, 8 Sex = "男" 9 }; 10 11 return View(student); 12 }
視圖指定模型
在視圖中指定模型【@model 完整類名】,獲取屬性值【@Model.屬性名】即可,如下所示:
1 @model DemoCoreMVC.Models.Student 2 <h1>歡迎公子小六</h1> 3 <div> 4 <span>學號:</span> 5 <span>@Model.Id</span> 6 </div> 7 <div> 8 <span>姓名:</span> 9 <span>@Model.Name</span> 10 </div> 11 <div> 12 <span>年齡:</span> 13 <span>@Model.Age</span> 14 </div> 15 <div> 16 <span>性別:</span> 17 <span>@Model.Sex</span> 18 </div>
運行測試
在瀏覽器中輸入網址【https://localhost:7116/Hello/】頁面如下所示:
TempData
首先ViewData和ViewBag都是一次性傳遞數據,如果跳轉到其他頁面,則無法進行獲取,那麼該如才能在頁面跳轉後,依然可以獲取內容呢,答案就是TempData。
TempData特征
TempData相比於ViewData和ViewBag,具有以下特征:
- TempData類型是TempDataDictionary。
- TempData用於把數據從一個action方法傳到另一個action方法,兩個action可以不再同一個controller中,也可以在同一個controller中。
TempData示例
首先有兩個頁面Test3,Test4,在Test3中,分別往ViewData和TempData中各自添加了一個Name名稱的值。然後再讓頁面從Test3跳轉到Test4。然後在Test4的頁面中分別獲取兩個值。
1 public IActionResult Test3() 2 { 3 ViewData.Add("Name", "公子小六1"); 4 TempData.Add("Name", "公子小六2"); 5 return View(); 6 } 7 8 public IActionResult Test4() 9 { 10 11 return View(); 12 }
視圖頁面內容也非常簡單,如下所示:
Test3.cshtml頁面內容如下:
1 <a href="~/Hello/Test4">跳轉Test4</a>
Test4.cshtml頁面內容,如下所示:
1 <h1>歡迎公子小六</h1> 2 3 <div> 4 <span>姓名ViewData:</span> 5 <span>@ViewData["Name"]</span> 6 </div> 7 <div> 8 <span>姓名TempData:</span> 9 <span>@TempData["Name"]</span> 10 </div>
運行程式,然後在瀏覽器中輸入網址【https://localhost:7116/Hello/Test3】,如下所示:
由以上示例可以看出:
- ViewData在頁面傳遞後,前一個Action添加的鍵值已經被清除。
- TempData中的值在頁面跳轉後依然保存。
- TempData 在第二次請求後會被清空,第三次請求則獲取不到。
註意:TempData也只支持一次跨Action跳轉,不支持多次跳轉。
以上就是ASP.NET Core MVC從入門到精通之接化發 第二部分的全部內容,旨在拋轉引玉,一起學習,共同進步。
作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章