MVC页面传值的方式主要有三种:
第一种:
采用ViewData。采用键值对的方式,ViewData存储的是一个object类型,传到view层需要强类型转换;使用起来类似于字典集合模式:
ViewData["key"]="value"
第二种:
采用ViewBag。ViewBag是ViewData模式的一部分,采用模式也就是ViewBag.key=value.
PS:
1、关于ViewData和ViewBag对比如下
ViewData与ViewBag对比:
ViewData |
ViewBag |
它是Key/Value字典集合 |
它是dynamic类型对像 |
从Asp.net MVC 1 就有了 |
ASP.NET MVC3 才有 |
基于Asp.net 3.5 framework |
基于Asp.net 4.0与.net framework |
ViewData比ViewBag快 |
ViewBag比ViewData慢 |
在ViewPage中查询数据时需要转换合适的类型 |
在ViewPage中查询数据时不需要类型转换 |
有一些类型转换代码 |
可读性更好 |
2、关于ViewData和ViewBag的使用,举例如下:
Control中一个action的代码:
public ActionResult GetView() { Employee emp = new Employee(); emp.FirstName = "Sukesh"; emp.LastName = "Marla"; emp.Salary = 2000; ViewData["Employee"] = emp; //ViewBag.empobj = emp; return View("MyView"); }
该action对应的View代码如下:
@{ Layout = null; } @using MyMVC3Demo.Models <!DOCTYPE html> <html> <head> <title>MyView</title> </head> <body> <div> @{ Employee emp = (Employee)ViewData["Employee"]; } <b>Employee Details</b><br /> Employee Name:@emp.FirstName @emp.LastName<br /> Employee Salary:@emp.Salary.ToString("C") </div> </body> </html>
注意:该地方引用了using命名空间,进行类型转换;
3、使用情况:
使用viewdata和viewbag可以实现数据的传值,但是针对数据类型的转换确实一个前后脱节的过程,简单的说,如果Control和View之间没有定义好Key和数据类型,那么数据转换的时候,可能就潜在出现问题,于是便有了第三种传值方式;
第三种:
强类型的view获取数据类型,实现代码如下:
Control中某个Action代码如下:
public ActionResult GetView() { Employee emp = new Employee(); emp.FirstName = "Sukesh"; emp.LastName = "Marla"; emp.Salary = 2000; //ViewData["Employee"] = emp; //ViewBag.empobj = emp; return View("MyView",emp); }
注意:返回View的时候需要将实体emp带到View中;
view对应的代码如下:
@using MyMVC3Demo.Models @model Employee @{ Layout = null; } <!DOCTYPE html> <html> <head> <title>MyView</title> </head> <body> <div> <b>Employee Details3</b><br /> Employee Name:@Model.FirstName @Model.LastName<br /> Employee Salary:@Model.Salary.ToString("C")<br /> @if (Model.Salary > 1500) { <span style=" background-color:Yellow">EmplaySale</span> } else { <span style="background-color:Green">SSL</span> } </div> </body> </html>
注意:需要先声明@model ,该语句就是告知View要传递的数据类型,以便于数据的强类型转换。@Model就可以使用该页面接收到的实体数据了。
时间: 2024-10-13 11:24:30