总结ASP.NET MVC Web Application中将数据显示到View中的几种方式

来源:互联网 发布:大智慧期货行情软件 编辑:程序博客网 时间:2024/06/10 18:45

 

当我们用ASP.NET MVC开发Web应用程序的时候,我们都是将需要呈现的数据通过"Controllers"传输到"View"当中,怎么去实现,下面我介绍一下我在实际工作当中用到过的几种方式。

 

创建一个ASP.NET MVC Web Application

在Visual Studio中创建ASP.NET Web Application应用程序,在向导的下一个窗口中选择空的模板。

 

创建Model

接着我们在Models文件夹下创建一个Product类,用来传递数据。

1     public class Product2     {3         public int ProductID { get; set; }4         public string ProductName { get; set; }5         public decimal Price { get; set; }6         public int Count { get; set; }7         public string Description { get; set; }8     }

 

创建Controller

接着在Controllers文件下创建一个Controller, 命名为"ProductController"。

 

创建View

然后我们在Views -> Product目录下创建一个View,命名为Index

到此,我们创建好了ModelViewController,在开始运行之前,我们需要更改一下默认路由配置。打开App_Start目录下的RouteConfig.cs文件,并更改默认路由如下:

 1     public class RouteConfig 2     { 3         public static void RegisterRoutes(RouteCollection routes) 4         { 5             routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 6  7             routes.MapRoute( 8                 name: "Default", 9                 url: "{controller}/{action}/{id}",10                 defaults: new { controller = "Product", action = "Index", id = UrlParameter.Optional }11             );12         }13     }

好了,下面我们就正式开始实现数据从"Controller"到"View"的实现。

 

1. 使用ViewData。

ViewData是一个字典,它存放的是键值对。

打开新建好的ProductController.cs,使用using引入Product类所在的命名空间,在IndexAction里创建一个Product对象并且赋值给一个ViewData

using TransDataToView.Models;

 

 1         public ActionResult Index() 2         { 3             Product product = new Product 4             { 5                 ProductID = 1, 6                 ProductName = "BMW X5", 7                 Price = 1000000, 8                 Count = 5, 9                 Description = "BMW SUV"10             };11 12             ViewData["Product"] = product;13 14             return View();15         }

接着,我们打开新建好的Index View文件,对Controller里的ViewData数据进行接收处理。

 1 @using TransDataToView.Models 2 @{ 3     Layout = null; 4 } 5  6 <!DOCTYPE html> 7  8 <html> 9 <head>10     <meta name="viewport" content="width=device-width" />11     <title>Index</title>12 </head>13 <body>14     <div>15         @{16             var product = (Product)ViewData["Product"];17         }18         <h2>19             Product ID: @product.ProductID <br />20             Product Name: @product.ProductName <br />21             Price: @product.Price <br />22             Count: @product.Count <br />23             Description: @product.Description24         </h2>25     </div>26 </body>27 </html>

 

因为我们需要将ViewData数据转换成需要的Product对象数据,所以这里要引入Produdct类所在的命名空间,使用@符号,也就是Razor语法来引入,定义,赋值等操作。

 

2. 使用ViewBag。

ViewBag它跟ViewData一样,都是字典值,但它存放的不是键值对,而是dynamic动态类型,这是ASP.NET MVC3新增的部分。

同样我们在Index Action里将Proudct对象赋值给一个ViewBag

        public ActionResult Index()        {            Product product = new Product            {                ProductID = 1,                ProductName = "BMW X5",                Price = 1000000,                Count = 5,                Description = "BMW SUV"            };            ViewBag.Product = product;            return View();        }

同样,我们打开Index View文件,对Controller里的ViewBag数据进行接收处理。

 1 @{ 2     Layout = null; 3 } 4  5 <!DOCTYPE html> 6  7 <html> 8 <head> 9     <meta name="viewport" content="width=device-width" />10     <title>Index</title>11 </head>12 <body>13     <div>14         <h3>15             Product ID: @ViewBag.Product.ProductID <br />16             Product Name: @ViewBag.Product.ProductName <br />17             Price: @ViewBag.Product.Price <br />18             Count: @ViewBag.Product.Count <br />19             Description: @ViewBag.Product.Description20         </h3>21     </div>22 </body>23 </html>

可以看到ViewBag不需要转型直接就可以使用里面的数据了。

 

3. 使用TempData。

TempData也是字典,它的使用完全等同于ViewData,两者之间最大的差异是TempData对数据的保存是临时性的。也就是它请求后,数据就被清除,也就是只能通过一次Controller传递。通常用于Action之间的一次性传递,所以它一般不直接用于传递到View中。

我们增加一个名为"TempDataIndex"的Action

Controller:

 1         public ActionResult Index() 2         { 3             ViewData["Message"] = "This is a View Data Message."; 4  5             if (TempData["Message"] != null) 6                 ViewData["Message"] = TempData["Message"]; 7  8             return View(); 9         }10 11         public ActionResult TempDataIndex()12         {13             TempData["Message"] = "This is a Temp Data Message.";14 15             return RedirectToAction("Index");16         }

View:

1     <div>2         <h3>3            @ViewData["Message"]4         </h3>5     </div>

我们运行程序。结果如下:

此时TempData数据为null,我们导航到/Product/TempDataIndex下,结果如下:

我们看到通过TempDataIndex的Action里,TempData["Message"]有了数据,然后转向了Index的Action方法里,所以TempData的值赋给了ViewData。这是我们刷新一下页面,结果如下:

 

4. 使用View(object)。

通过直接传递object数据到View中。

 1         public ActionResult Index() 2         { 3             Product product = new Product 4             { 5                 ProductID = 1, 6                 ProductName = "BMW X5", 7                 Price = 1000000, 8                 Count = 5, 9                 Description = "BMW SUV"10             };11 12             return View(product);13         }

那么在View文件中需要绑定Controller里传递的对象。

 1 @using TransDataToView.Models 2 @model TransDataToView.Models.Product 3 @{ 4     Layout = null; 5 } 6  7 <!DOCTYPE html> 8  9 <html>10 <head>11     <meta name="viewport" content="width=device-width" />12     <title>Index</title>13 </head>14 <body>15     <div>16         <h2>17             Product ID: @Model.ProductID <br />18             Product Name: @Model.ProductName <br />19             Price: @Model.Price <br />20             Count: @Model.Count <br />21             Description: @Model.Description22         </h2>23     </div>24 </body>25 </html>

@model TransDataToView.Models.Product 意思就是绑定的是Product对象的Model,然后使用@Model.字段属性名来取值。

 

 

好了,本篇就先到此,希望对你有所帮助,谢谢!

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美图m8蓝屏了怎么办 美图m8手机蓝屏怎么办 美图m6s手机白屏怎么办 魅蓝2开不开机怎么办 魅族手机主键没反应怎么办 魅族手机主键失灵怎么办 手机4g网络不稳定怎么办 华为m9收不到手机信息怎么办 华为手机wifi信号弱怎么办 手机连接wifi信号差怎么办 华华为p10信号不好怎么办 烟没拆封受潮了怎么办 和亲儿子发生了性关系怎么办 无心磨磨出来圆度不好怎么办 中国人在越南办结婚证怎么办? 无线网被限速了怎么办 联通大王卡上传速度慢怎么办 小米手机下载视频速度慢怎么办 大疆御air脚架断了怎么办 大疆飞行器线断了怎么办 移动校园卡套餐到期后怎么办 流量年包到期了怎么办 家里无线网信号不好怎么办 无线网光信号红灯了怎么办 机顶盒获取不了lp地址怎么办 32内存卡丢了怎么办 手机上的相机找不到了怎么办 有刘鑫这样的闺蜜该怎么办 电脑开机网络初始化失败怎么办 电脑放音乐没有声音怎么办 苹果手机gprs信号弱怎么办 苹果导航gprs信号弱怎么办 au没有波形 没有声音怎么办 屏幕驱动板坏了怎么办 安吉星流量超了怎么办 网络被伪基站覆盖怎么办 骨头渣子卡嗓子里怎么办 执法仪记录仪关不了机怎么办 执法记录仪开不了机怎么办 华为警务通丢了怎么办 华德安执法记录仪死机怎么办