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. 我的Python成长之路---第六天---Python基础(19)---2016年2月20日(晴)

      shelve模块 shelve模块是pickle模块的扩展,可以通过key,value的方式访问pickle持久化保存的数据 持久化保存: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

    2. 2013 南京邀请赛 A play the dice 求概率

      /** 大意:给定一个色子,有n个面,每一个面上有一个数字,在其中的m个面上有特殊的颜色,当掷出的色子出现这m个颜色之一时,可以再掷一次..求其最后的期望 思路:假设 期望为ans 4 ans = 1 ...

    3. Apache中RewriteCond规则参数介绍(转)

      CodeIgniter2.0已经出来有20多天了呢~也就是我一直用的php框架(CI).一直都在研究jquery,倒是把CI给忘到一边去了,呵呵~~今天公司事情不是很多,于是开始熟悉一下CI2.0的一 ...

    4. 一維條碼編碼規則(1D Barcode)

      1.Code 39 條碼:又分 標準型Code 39 條碼(Standard Code 39):資料內容包含有0~9數字,A~Z英文字母,”+”,”-“,”*”,”/”,”%”,”$”,”.”以及sp ...

    5. javascript使用消息框

      之前很多地方都用过alert,它的作用是弹出一个警告框,我们调用的方法是alert("输入的内容");其实更正确的写法是 window.alert("输入的内容" ...

    6. ListView判断滑动底部

      通过实现OnScrollListener这个接口,然后复写 public abstract void onScroll (AbsListView view, int firstVisibleItem, ...

    7. Linux 开放服务端口

      CentOS 6.5上安装Tomcat 服务器,需要开放服务端口,供其他计算机访问部署在Tomcat中的Web应用.下面是开放端口的方法. 我知道的方法有两种.下面以开放8080端口为例. 方法一:命 ...

    8. POJ 3261 可重叠的 k 次最长重复子串【后缀数组】

      这也是一道例题 给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠.算法分析:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组.不同的是,这里要判断的是有没有一个组 ...

    9. iOS中NSString转换成HEX(十六进制)-NSData转换成int

      http://www.2cto.com/kf/201402/281501.html 1 2 3 4 5 6 NSString *str = @"0xff055008"; //先以1 ...

    10. DE1-SOC的sof文件无法下载解决办法

      按照前面友晶科技的文档介绍一步步的做,后面发现根本无法下载sof文件. 通常思维: 一,器件选错了.器件选择错误会导致sof文件无法下载,至于这个ID具体怎么识别我没有追究.如果是这种错误Quartu ...