Controller向View传值方式总结

总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是:

  • ViewBag
  • ViewData
  • TempData
  • 向普通View页面传一个Model对象
  • 向强类型页面传传一个Model对象
  • 用一个ViewModel对象解决所有问题
  • 首先我们需要明确的是我们从controller向view传值的时候,这些方式分别处于什么样的地位:

    我们一般会向页面传递一个主要的类型的数据,一般是情况下是一个List<Model>,如果只有这个,很好办,一个model对象就解决了,但是往往除此之外还会有一些额外的零散的数据需要传递,比如分页的pageIndex,或者pageCount等等,这样的数据用原有的model就无能为力了,这时候,我们就可以用ViewBag、ViewData、TempData来传递这些额外的数据。

    ViewBag、ViewData、TempData之间的差别:

    ViewData与ViewBag之间非常相似,两者使用的场景基本一致,但是ViewData的类型是很明确的,使用的时候经常需要强制类型转换,而ViewBag的类型是动态的,不确定的,直接就可以使用,他们的传值范围是:controller向view传值,view自己和自己传值。而TempData存在的目的就是为了防止redirect时候数据的丢失,所以它的传值范围是当前controller和跳转后的controller之间。

    下面来详细的讲述他们的具体用法:

    ViewBag

    我们可以认为 ViewBag=ViewData+Dynamic wrapper around the ViewData ,接下来你就可以体会到这个公式的含义了。

    1、conroller向view传值

    2、view向view传值:

    3、利用ViewBag传递一个对象:

    ViewData

    1、ViewData的基本用法

    2、ViewData 转换成 ViewBag:

    3、ViewBag 转换成 ViewData:

    TempData

    TempData用于在Redirect的时候保存数据,ViewData、ViewBag在跳转后就会变成null,但是TempData不会,下面是TempData的用法示例:

                };
        TempData["ModelName"] = model;
        return RedirectToAction("About");
    }
    <pre><pre lang="cs">public ActionResult About()
    {
        var model= TempData["ModelName"];
        return View(model);
    }

    普通页面传递model:

    //Action代码
    public ActionResult Index()
    {
      Product p = new Product();
      p.Name = "Toy";
      return View(p);
    }
     
    
    在View中调用的代码: 
    Product : <%: ((Product)Model).Name %>

    向强类型试图传递model

    1、WebForm Engine的试图的实现:

    //Aciton的代码
    public ActionResult Index()
    {
      Product p = new Product();
      p.Name = "Toy";
      return View(p);
    }
    
    View中的代码
    声明类型
    <%@ Page Inherits="System.Web.Mvc.ViewPage<Product>" %>
    
    直接用Model调用该对象
    <h2> Product Name: <%: Model.Name %> </h2>
     

    2、Razor Engine的实现:

    在Razor中声明类型的方式:
    @model Mvc3App.Models.Product
     
    在Razor中调用对象的方式:
    <h2> Product: @Model.Name </h2>

    ViewModel

    我们可以用一个ViewModel来实现model和其他三个额外传值的对象的职能,具体具体的实现方式,请看另外一篇文章:

    http://www.cnblogs.com/key1309/p/3489191.html

    本文章总结自:http://bubblogging.wordpress.com/2011/12/31/mvc-data-controller-view/

    http://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/various-ways-to-pass-data-from-controller-to-view-in-mvc/

    两篇文章

    MVC:Controller向View传值方式总结的更多相关文章

    1. ASP.NET MVC Controller向View传值方式总结

      Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...

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

      上几篇博文提到MVC和WebForm的区别,主要是MVC的Controller和View将传统的WebForm的窗体和后台代码做了解耦,这篇博文简单介绍一下在MVC中Controller向View是如 ...

    3. Controller向View传值方式总结

      http://www.cnblogs.com/guohu/p/4377974.html 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag Vi ...

    4. MVC Controller向View传值(ViewData与ViewBag)

      近期在开发项目中,使用的是ASP.NET MVC因为之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习. 一:使用 ViewData使用: public ActionResult I ...

    5. MVC Controller 与 View 传值

      Controller 到 View 1 强类型 控制器 // GET: /Test/ public ActionResult Index() { DateTime date = DateTime.No ...

    6. 总结Controller向View传值的方式(转)

      总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传 ...

    7. 【项目经验】之——Controller向View传值

      我们的ITOO进行了一大部分了,整体上来说还是比较顺利的.昨天进行了一次验收,大体上来说,我们新生这块还是可以的.不仅仅进行了学术上的交流,还进行了需求上的更新.也正是由于这一次,我有了解到了一个新的 ...

    8. Spring MVC Controller中解析GET方式的中文参数会乱码的问题(tomcat如何解码)

      Spring MVC Controller中解析GET方式的中文参数会乱码的问题 问题描述 在工作上使用突然出现从get获取中文参数乱码(新装机器,tomcat重新下载和配置),查了半天终于找到解决办 ...

    9. MVC中页面的传值方式总结

      MVC中的页面传值,通常指Controller和view之间的数据传递,经常用到的有几种方式,总结如下: 一:ViewData 获取或设置一个字典,其中包含在控制器和视图之间传递的数据.使用ViewD ...

    随机推荐

    1. JQuery隔行变色

      <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

    2. python subprocess重定向标准输出

      subprocess.call("ping -c 1 %s" % ip,shell = True,stdout = open('/dev/null','w'),stderr = s ...

    3. Python学习之collections module-defaultdict()

      defaultdict()继承自dict系统内置类型defaultdict()定义以及作用:    返回一个和dictionay类似对象,和dict不同:      1. 可以制定key对应value ...

    4. spoj 3871 gcd extreme

      题目大意给出一个n,求sum(gcd(i,j),<i<j<=n); 可以明显的看出来s[n]=s[n-]+f[n]; f[n]=sum(gcd(i,n),<i<n); 现 ...

    5. 字符串-06. IP地址转换(20)

      #include<iostream> #include<string> #include<cmath> using namespace std; int main( ...

    6. Windows 8.1 RTM初体验

      Windows 8.1正式发布在10月17日,现在可以在MSDN/TechNet进行订阅下载. 操作系统版本号和Windows Server 2012 R2保持一致. 开始屏幕动态磁贴现在有4种尺寸可 ...

    7. CSS的三种样式:内联式,嵌入式,外部式以及他们的优先级

      从CSS 样式代码插入的形式来看基本能够分为下面3种:内联式.嵌入式和外部式三种. 1:内联式css样式表就是把css代码直接写在现有的HTML标签中,如以下代码: <p style=" ...

    8. C++之字符串分割函数split

      c++之字符串分割: /* *c++之字符串分割: */ #include <iostream> #include <string> #include <vector&g ...

    9. Week3(9月23日):例子更Powerful更完整了,哇咔咔

      Part I:提问  =========================== 1.控制器中动作方法的返回类型有哪些? 2.如果控制器代码如下,请问浏览器中如何输入什么路由访问? public clas ...

    10. Week8(10月31日):并发

      Part I:提问  =========================== 1. 更新关联.删除关联数据,需要注意哪些问题?以Instructor类为例说明. 2. 已知某请假系统,请实现以下界面的 ...