隨著技術(shù)的發(fā)展,ASP.NET Core MVC也推出了好長時間,經(jīng)過不斷的版本更新迭代,已經(jīng)越來越完善,本系列文章主要講解ASP.NET Core MVC開發(fā)B/S系統(tǒng)過程中所涉及到的相關(guān)內(nèi)容,適用于初學(xué)者,在校畢業(yè)生,或其他想從事ASP.NET Core MVC 系統(tǒng)開發(fā)的人員。?經(jīng)過前兩篇文章的講解,初步了解ASP.NET Core MVC項目創(chuàng)建,啟動運行,以及ASP.NET Core MVC的命名約定,創(chuàng)建控制器,視圖,模型,接收參數(shù)等內(nèi)容,今天繼續(xù)講解ASP.NET Core MVC 數(shù)據(jù)傳遞到客戶端等相關(guān)內(nèi)容,僅供學(xué)習(xí)分享使用。
?
概述
?
在ASP.NET Core MVC項目中,控制器傳遞數(shù)據(jù)到視圖,常見的有以下幾種方式:
- ViewData,一個Key/Value鍵值對集合,通過ViewData可以方便的進行數(shù)據(jù)對象的存儲和獲取,只是ViewData獲取的對象的object類型,主要進行一定的類型轉(zhuǎn)換。
- ViewBag,一定dynamic類型對象,需要在運行時進行解析操作。
- Model模型,對于強類型視圖,不僅可以通過模型接收參數(shù),也可以回傳數(shù)據(jù)。
- TempData,支持頁面跳轉(zhuǎn)數(shù)據(jù)傳遞。但也只支持一次頁面跳轉(zhuǎn)數(shù)據(jù)傳遞。
?
ViewData
?
ViewData是控制器中一個ViewDataDictionary類型的屬性,用來存儲Key/Value的字典集合,在控制器中可以直接使用。
?
ViewData特征
?
ViewData具有以下特征:
- ViewData是一個繼承自ViewDataDictionary類的Dictionary對象,用來從Controller向?qū)?yīng)的View傳遞值。
- ViewData的只在當(dāng)前當(dāng)前的請求中有效,生命周期和View相同,其值不能在多個請求 中共享。
- 在重定向(redirection)后,ViewData中存儲的變量值將變?yōu)閚ull。
- 在取出ViewData中的變量值是,必須進行合適的類型轉(zhuǎn)換(隱式或顯式)和空值檢查。?
?
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是一個動態(tài)類型變量(dynamic),這是C# 4.0引入的新特性,變量類型會在運 行時進行解析。
?
ViewBag特征
?
ViewBag具有以下特征:
- ViewBag基本上是ViewData的包裝,也是用來從Controller向View來傳遞值的。
- ViewBag也只在當(dāng)前的請求中有效。
- 在重定向(redirection)后,ViewBag中存儲的變量值將變?yōu)閚ull。
- 因為ViewBag是動態(tài)類型,所以我們在取得其值時,不需要進行類型轉(zhuǎn)換。
?
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>
運行測試,在瀏覽器中,輸入網(wǎng)址【https://localhost:7116/Hello/Test2】,如下所示:
?
模型數(shù)據(jù)
?
在ASP.NET Core MVC項目中,模型的主要作用就是在控制器和視圖之間進行數(shù)據(jù)交互,用來傳遞數(shù)據(jù)也非常簡單,如下所示:
?
創(chuàng)建模型
?
如果要用模型進行數(shù)據(jù)交互,首先是要創(chuàng)建模型,創(chuàng)建方法在前一篇文章中有介紹,不再贅述,示例模型類如下所示:
1 public class Student 2 { 3 /// <summary> 4 /// 唯一標(biāo)識 5 /// </summary> 6 public int Id { get; set; } 7 8 /// <summary> 9 /// 學(xué)生名稱 10 /// </summary> 11 public string Name { get; set; } 12 13 /// <summary> 14 /// 學(xué)生年齡 15 /// </summary> 16 public int Age { get; set; } 17 18 /// <summary> 19 /// 學(xué)生性別 20 /// </summary> 21 public string Sex { get; set; } 22 }
?
控制器實例化模型
?
在控制器中對模型進行實例化,然后調(diào)用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>學(xué)號:</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>
?
運行測試
?
在瀏覽器中輸入網(wǎng)址【https://localhost:7116/Hello/】頁面如下所示:
?
TempData
?
首先ViewData和ViewBag都是一次性傳遞數(shù)據(jù),如果跳轉(zhuǎn)到其他頁面,則無法進行獲取,那么該如才能在頁面跳轉(zhuǎn)后,依然可以獲取內(nèi)容呢,答案就是TempData。
?
TempData特征
?
TempData相比于ViewData和ViewBag,具有以下特征:
- TempData類型是TempDataDictionary。
- TempData用于把數(shù)據(jù)從一個action方法傳到另一個action方法,兩個action可以不再同一個controller中,也可以在同一個controller中。
?
TempData示例
?
首先有兩個頁面Test3,Test4,在Test3中,分別往ViewData和TempData中各自添加了一個Name名稱的值。然后再讓頁面從Test3跳轉(zhuǎn)到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 }
視圖頁面內(nèi)容也非常簡單,如下所示:
Test3.cshtml頁面內(nèi)容如下:
1 <a href="~/Hello/Test4">跳轉(zhuǎn)Test4</a>
Test4.cshtml頁面內(nèi)容,如下所示:
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>
運行程序,然后在瀏覽器中輸入網(wǎng)址【https://localhost:7116/Hello/Test3】,如下所示:
由以上示例可以看出:
- ViewData在頁面?zhèn)鬟f后,前一個Action添加的鍵值已經(jīng)被清除。
- TempData中的值在頁面跳轉(zhuǎn)后依然保存。
- TempData 在第二次請求后會被清空,第三次請求則獲取不到。
注意:TempData也只支持一次跨Action跳轉(zhuǎn),不支持多次跳轉(zhuǎn)。文章來源:http://www.zghlxwxcb.cn/news/detail-409816.html
以上就是ASP.NET Core MVC從入門到精通之接化發(fā) 第二部分的全部內(nèi)容,旨在拋轉(zhuǎn)引玉,一起學(xué)習(xí),共同進步。文章來源地址http://www.zghlxwxcb.cn/news/detail-409816.html
到了這里,關(guān)于ASP.NET Core MVC 從入門到精通之接化發(fā)(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!