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的用法示例:

public ActionResult Index()
{
  var model = new Review()
            {
                Body = "Start",
                Rating=
            };
    TempData["ModelName"] = model;
    return RedirectToAction("About");
} 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/Percy_Lee/p/4885261.html#top

本文章总结自:

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/

两篇文章

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

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

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

  2. MVC:Controller向View传值方式总结

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

  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. Asp.Net MVC Control向View传值

     1.通过View(Parameter)参数传值     Control: namespace MyMVCDemo.Controllers { public class PersonControlle ...

  7. ASP.NET MVC Controller接收ajax post方式发送过来的json对象或数组数据

    本例旨在说明我的一种Controller接收ajax提交(POST)过来的json对象或数组信息的方式,感觉应该有更好的方式,欢迎提出宝贵意见. JSON.stringify(jsonObj)不支持I ...

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

    转自:http://www.cnblogs.com/shinima/p/3940452.html 1.提供视图模型对象 你能把一个对象作为View方法的参数传递给视图. public ViewResu ...

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

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

随机推荐

  1. Android UI ActionBar功能-ActionBarProvider的使用

    分享功能是很多App都有一个功能,ActionBarProvider可以实现分享功能: 3.0以前的版 本和3.0以后的版 本的区别: public class MainActivity extend ...

  2. Soft Drinking(水)

    A. Soft Drinking time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  3. ORA-07445 [mdagun_iter+957] When Using SDO_AGGR_UNION 问题处理

    问题描写叙述: ORA-07445: mdagun_iter()  [Address not mapped to object] Oracle Database 10g Enterprise Edit ...

  4. nade.js(一)进程管理

    简介 process是一个全局内置对象,可以在代码中的任何位置访问此对象,这个对象代表我们的node.js代码宿主的操作系统进程对象. 使用process对象可以截获进程的异常.退出等事件,也可以获取 ...

  5. 节点与坐标系——Cocos2d-x学习历程(十)

    1.Node Cocos2d-x把渲染树上的每一个游戏元素抽象为一个节点,即Node.一切游戏元素都继承自Node,因此它们都具有Node所提供的特性.Node定义了一个可绘制对象的通用特性,包括位置 ...

  6. [分 享] PHPCMS V9 更换域名,附件地址无法批更新(更换变便)问题>解决方法!!

    大家应该都有在域名更换(比如说,从本地上传到空间)的情况下,用内容>附件管理>附件地址替换 功能. 基本上替换不了所有表中原来域名的地址. 现PHPCMS V9最新版本的依旧存在些问题. ...

  7. css负边距自适应布局

    单列定宽单列自适应布局: <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> ...

  8. Js把URL中的参数解析为一个对象

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. echarts实现上海地域PM值(map、timeline)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Xampp Linux应用

    一.基本操作: 1.Xampp安装包下载:   https://www.apachefriends.org/index.html   2.安装与配置:   将xampp-linux-x64-5.6.3 ...