MVC:Control与View传值

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

MVC:Control与View传值的相关文章

Asp.Net MVC Control向View传值

 1.通过View(Parameter)参数传值     Control: namespace MyMVCDemo.Controllers { public class PersonController : Controller { // // GET: /Person/ public ActionResult Index() { Person whiteperson = new Person(); whiteperson.Id = 1; whiteperson.Name = "James&qu

ASP.NET MVC Controller向View传值的几种方式

1)ViewBag ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName 控制器代码: 1 public ActionResult Index() 2 { 3 ViewBag.name = "梁顺盛"; 4 ViewBag.message = "欢迎使用MVC设计模式~~"; 5 return View(); 6 } 视图代码: <div> <!--利用HtmlHelper创建TextBox时,使用名称与ViewBag

MVC Controller向View传值(ViewData与ViewBag)

最近在开发项目中,使用的是ASP.NET MVC由于之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习! 一:使用 ViewData使用: public ActionResult Index() { List<string> colors = new List<string>(); colors.Add("red"); colors.Add("green"); colors.Add("blue"); Vi

MVC [Control与View交互]2

<1> 控制器 Home using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcApplication1.Models; namespace MvcApplication1.Controllers { public class HomeController : Controller { private salesEnt

MVC [Control与View交互]

<1> Home控制器 using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using MvcApplication4.Models; namespace MvcApplication4.Controllers { public class Ho

MVC 控制器向View传值的三种方法

1.提供视图模型对象 你能把一个对象作为View方法的参数传递给视图. public ViewResult Index() { DateTime date = DateTime.Now; return View(date); } 然后我们在视图中使用Razor的Model关键字来访问这个对象 @{ ViewBag.Title = "Index"; } <h2>Index</h2> The day is: @(((DateTime)Model).DayOfWeek

ASP.NET MVC 控制器向View传值的三种方法

转自:http://www.cnblogs.com/shinima/p/3940452.html 1.提供视图模型对象 你能把一个对象作为View方法的参数传递给视图. public ViewResult Index() { DateTime date = DateTime.Now; return View(date); } 然后我们在视图中使用Razor的Model关键字来访问这个对象 @{ ViewBag.Title = "Index"; } <h2>Index<

MVC Controller 与 View 传值

Controller 到 View 1 强类型 控制器 // GET: /Test/ public ActionResult Index() { DateTime date = DateTime.Now; //大部分时候使用自定义类型 return View(date); } 视图 @model DateTime @{ ViewBag.Title = "Index"; } <h2>Index</h2> <h2>The time is: @Model.

【MVC框架】——View和Controller之间的传值

在MVC中,Controller运行一个能够说是路由功能.它通过View传过来的数据,来决定应该调用哪一个Model,相同会把Model处理完的数据传给View,所以就总是涉及到Controller和View的传值,那么它们之间是怎么传值的呢? Controller向View传值 1.使用ViewBag Controller <span style="font-family:KaiTi_GB2312;font-size:18px;">public ActionResult