日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式

發布時間:2024/7/5 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備

在Models文件夾里面新添加Student實體類,用來模擬從Controller向View傳遞數據,Student類定義如下:

using System; using System.Collections.Generic; using System.Linq; using System.Web;namespace MVCStudyDemo.Models {public class Student{public int ID { get; set; }public string Name { get; set; }public int Age { get; set; }public string Sex { get; set; }public string Email { get; set; }} }

一、通過ViewData傳值

MVC從開始版本就一直支持使用ViewData將Controller里面的數據傳遞到View。ViewData定義如下:

從上面的截圖中可以看出,ViewData里面存的是字典類型的數據,在查看ViewDataDictionary的定義:

注意:ViewDataDictionary繼承自IDictionary等接口,所以ViewData里面的Value值類型是object的,使用的時候需要進行類型轉換。

新建Controller,并命名為ViewDataDemo,該Controller用來模擬通過ViewData向View傳遞數據

Controller代碼如下:

using MVCStudyDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MVCStudyDemo.Controllers {public class ViewDataDemoController : Controller{// GET: ViewDataDemo/// <summary>/// 通過ViewData向對應的View傳遞數據/// </summary>/// <returns></returns>public ActionResult Index(){// 1、將字符串傳遞到ViewViewData["Other"] = "通過ViewData向View傳遞字符串";// 2、通過KeyValuePair添加ViewData.Add(new KeyValuePair<string, object>("name","tom"));// 3、直接添加ViewData.Add("age", 23);// 4、傳遞集合到ViewViewData["Data"] = new List<Student>(){new Student{ID = 1,Name = "唐僧",Age = 34,Sex = "",Email = "747976523@qq.com"},new Student{ID = 2,Name = "孫悟空",Age = 635,Sex = "",Email = "sunwukong@163.com"},new Student{ID = 3,Name = "白骨精",Age = 4532,Sex = "",Email = "74345523@qq.com"}};// 返回同名的視圖return View();}} }

?對應的View視圖代碼如下:

@*引入Student的命名空間*@ @using MVCStudyDemo.Models; @{ViewBag.Title = "Index";// 這里使用的是Razor語法,寫的是后臺C#代碼// ViewData的Value值是Object類型的,需要進行類型轉換// 常規寫法是先在這里進行類型轉換var list = ViewData["Data"] as List<Student>; }<h2>通過ViewData向View傳遞數據</h2> <div class="jumbotron"><div><div>1、傳遞字符串 other:@ViewData["Other"];</div><div>2、傳遞字符串 name:@ViewData["name"];</div><div>3、傳遞字符串 age:@ViewData["age"];</div><div>4、傳遞集合方式一@foreach (var item in list){<div>ID:@item.ID&nbsp;&nbsp;Name:@item.Name&nbsp;&nbsp;Age:@item.Age&nbsp;&nbsp;Sex:@item.Sex&nbsp;&nbsp;Email:@item.Email</div>}</div><div>5、傳遞集合方式二@foreach (var item in ViewData["Data"] as List<Student>){<div>ID:@item.ID&nbsp;&nbsp;Name:@item.Name&nbsp;&nbsp;Age:@item.Age&nbsp;&nbsp;Sex:@item.Sex&nbsp;&nbsp;Email:@item.Email</div>}</div></div> </div>

?運行結果:

二、通過ViewBag傳值

ViewBag是在MVC3中出現的,ViewBag是動態(dynamic)類型的。

新建Controller,并命名為ViewBagDemo,該Controller用來模擬通過ViewBag向View傳遞數據。

Controller代碼:

using MVCStudyDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MVCStudyDemo.Controllers {public class ViewBagDemoController : Controller{// GET: ViewBagDemo/// <summary>/// 通過ViewBag向View傳遞數據/// </summary>/// <returns></returns>public ActionResult Index(){// 通過ViewData傳值ViewData["name"] = "ViewData";// 傳遞集合到ViewViewData["Data"] = new List<Student>(){new Student{ID = 1,Name = "唐僧",Age = 34,Sex = "",Email = "747976523@qq.com"},new Student{ID = 2,Name = "孫悟空",Age = 635,Sex = "",Email = "sunwukong@163.com"},new Student{ID = 3,Name = "白骨精",Age = 4532,Sex = "",Email = "74345523@qq.com"}};// 通過ViewBag傳值ViewBag.Name = "ViewBag";ViewBag.StudentData = new Student(){ID = 5,Name = "沙悟凈",Age = 567,Sex = "",Email = "4567890345@qq.com"};// 返回同名視圖return View();}} }

對應的Index視圖代碼:

@*引入Student的命名空間*@ @using MVCStudyDemo.Models; @{ViewBag.Title = "Index";// ViewBag是dynamic類型的,使用的時候不需要進行類型轉換var stu = ViewBag.StudentData;var stuList = ViewBag.Data; }<h2>通過ViewBag向View傳遞數據</h2> <div class="jumbotron"><div><div>Controller通過ViewBag向View傳遞數據</div><div>1、通過ViewData傳遞字符串 ViewData["name"]:@ViewData["name"];</div><div>2、通過ViewBag傳遞字符串 ViewBag.name:@ViewBag.Name;</div><div>3、輸出stu<div>ID:@stu.ID&nbsp;&nbsp;Name:@stu.Name&nbsp;&nbsp;Age:@stu.Age&nbsp;&nbsp;Sex:@stu.Sex&nbsp;&nbsp;Email:@stu.Email</div>4、輸出stuList@foreach (var item in stuList){<div>ID:@item.ID&nbsp;&nbsp;Name:@item.Name&nbsp;&nbsp;Age:@item.Age&nbsp;&nbsp;Sex:@item.Sex&nbsp;&nbsp;Email:@item.Email</div>}</div></div> </div>

?運行結果;

看了上面的運行結果,你可能會提出如下的兩個疑問:

1、Controller里面沒有定義ViewBag.Data,為什么在這里可以使用呢?

這是因為ViewBag是從MVC3版本才開始出現的,為了兼容以前的ViewData,所以這里雖然沒有定義ViewBag.Student,但是ViewBag可以使用ViewData里面定義的Data數據。

2、ViewData["name"]和ViewBag.name的值是一樣的

在控制器里面明明設置的兩個值是不同的,但是為什么這里都變成一樣的了呢?這是因為ViewData和ViewBag的屬性是重疊的,兩者都是字典類型的,一切以后面定義的屬性為準,即后面定義的會覆蓋前面定義的。

修改Controller代碼,將ViewData的順序放到ViewBag后面:

using MVCStudyDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MVCStudyDemo.Controllers {public class ViewBagDemoController : Controller{// GET: ViewBagDemo/// <summary>/// 通過ViewBag向View傳遞數據/// </summary>/// <returns></returns>public ActionResult Index(){// 通過ViewData傳值//ViewData["name"] = "ViewData";// 傳遞集合到ViewViewData["Data"] = new List<Student>(){new Student{ID = 1,Name = "唐僧",Age = 34,Sex = "",Email = "747976523@qq.com"},new Student{ID = 2,Name = "孫悟空",Age = 635,Sex = "",Email = "sunwukong@163.com"},new Student{ID = 3,Name = "白骨精",Age = 4532,Sex = "",Email = "74345523@qq.com"}};// 通過ViewBag傳值ViewBag.Name = "ViewBag";ViewBag.StudentData = new Student(){ID = 5,Name = "沙悟凈",Age = 567,Sex = "",Email = "4567890345@qq.com"};// 把ViewData的順序放到ViewBag后面ViewData["name"] = "ViewData";// 返回同名視圖return View();}} }

?在查看Index視圖顯示效果:

這時會發現,Index視圖里面顯示的都是ViewData的值了。

三、通過TempData傳值

新建Controller,并命名為TempDataDemo,該Controller用來模擬通過TempData向View傳遞數據。

Controller代碼:

using MVCStudyDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MVCStudyDemo.Controllers {public class TempDataDemoController : Controller{// GET: TempDataDemopublic ActionResult Index(){// ViewDataViewData["Name"] = "tom";// ViewBageViewBag.Name = "Jon";// TempDataTempData["Name"] = "Andi";TempData["Stu"] = new Student(){ID = 5,Name = "沙悟凈",Age = 567,Sex = "",Email = "4567890345@qq.com"};// 返回同名視圖return View();}} }

?對應的Index視圖代碼:

@*引入Student的命名空間*@ @using MVCStudyDemo.Models; @{ViewBag.Title = "Index"; } @{// 類型轉換var stu = TempData["Stu"] as Student; }<h2>通過TempData向View傳遞數據</h2> <div class="jumbotron"><p><div><div>通過ViewData傳遞字符串 ViewData["Name"]:@ViewData["Name"];</div></div></p><p><div><div>通過ViewBag傳遞字符串 ViewBag.Name:@ViewBag.Name;</div></div></p><p><div><div>1、傳遞字符串 TempData["Name"]:@TempData["Name"];</div>2、輸出stu<div>ID:@stu.ID&nbsp;&nbsp;Name:@stu.Name&nbsp;&nbsp;Age:@stu.Age&nbsp;&nbsp;Sex:@stu.Sex&nbsp;&nbsp;Email:@stu.Email</div></div></p> </div>

?運行結果:

從上面的結果中可以看出:TempData的屬性值不會覆蓋上面定義的屬性值。那TempData還有什么作用呢?在看下面的代碼:

using MVCStudyDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MVCStudyDemo.Controllers {public class TempDataDemoController : Controller{// GET: TempDataDemopublic ActionResult Index(int? id){// ViewDataViewData["Name"] = "tom";// ViewBageViewBag.Name = "Jon";// TempDataTempData["Name"] = "Andi";TempData["Stu"] = new Student(){ID = 5,Name = "沙悟凈",Age = 567,Sex = "",Email = "4567890345@qq.com"};if(id==null){// 跳轉到TempDataTest方法return RedirectToAction("TempDataTest");}else{// 返回同名視圖return View();} }public ActionResult TempDataTest(){// 返回同名視圖return View();}} }

?TempDataTest視圖代碼:

@*引入Student的命名空間*@ @using MVCStudyDemo.Models; @{ViewBag.Title = "TempDataTest";// 類型轉換var stu = TempData["Stu"] as Student; }<h2>TempDataTest</h2> <h3>ViewData["Name"]:@ViewData["Name"]</h3> <h3>ViewBage.Name:@ViewBag.Name</h3> <h3>TempData["Name"]:@TempData["Name"];</h3> <h3>ID:@stu.ID&nbsp;&nbsp;Name:@stu.Name&nbsp;&nbsp;Age:@stu.Age&nbsp;&nbsp;Sex:@stu.Sex&nbsp;&nbsp;Email:@stu.Email</h3>

?在瀏覽器里面輸入下面的URL地址:http://localhost:9080/TempDataDemo/index,這就表示傳遞的id是null值,運行結果:

你會發現這時ViewData和ViewBag都取不到數據了,只有TempData可以取到數據,可以得出TempData和ViewData、ViewBag的區別:

TempData是基于session存儲的,單次請求數據不丟失(ViewData和ViewBag會丟失),后臺跨頁面傳值,只能用一次

四、Model傳值

在Action放過里面的View上面F12轉到定義:

可以看到View有很多重載,其中一種可以直接傳遞model,如上面截圖中紅框所示。

新建Controller,并命名為ModelDemo,該Controller用來模擬通過Model向View傳遞數據。

對應的controller代碼:

using MVCStudyDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MVCStudyDemo.Controllers {public class ModelDemoController : Controller{// GET: ModelDemopublic ActionResult Index(){Student student = new Student(){ID = 5,Name = "沙悟凈",Age = 567,Sex = "",Email = "4567890345@qq.com"};// 返回modelreturn View(student);// 或者直接返回//return View(new Student()//{// ID = 5,// Name = "沙悟凈",// Age = 567,// Sex = "男",// Email = "4567890345@qq.com"//}); }} }

?Index視圖代碼:

@{ViewBag.Title = "Index"; }<h2>通過Model向View傳值</h2> <h3>ID:@Model.ID</h3> <h3>Name:@Model.Name</h3> <h3>Age:@Model.Age</h3> <h3>Sex:@Model.Sex</h3> <h3>Email:@Model.Email</h3>

??運行結果:

?

轉載于:https://www.cnblogs.com/dotnet261010/p/11416941.html

總結

以上是生活随笔為你收集整理的ASP.NET MVC教程四:ASP.NET MVC中页面传值的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。