码迷,mamicode.com
首页 > Web开发 > 详细

MVC:Control与View传值

时间:2015-11-19 22:18:16      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:

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就可以使用该页面接收到的实体数据了。

MVC:Control与View传值

标签:

原文地址:http://www.cnblogs.com/xibei666/p/4979186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!