前奏

1. 在新建项目中的Models文件下,新建Products类:

 public class Products
{
public int Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
}

2. 在控制器中实例化此类

var p = new Products()
{
Id = ,
Name = "饮料",
Price = 2.5
};

方式1:ViewData

将控制器中的方法用ViewData以键值对的形式类存储上述的实例化对象,如下:

ViewData["person"] = p;

然后在视图中获取ViewData中的值,并转换对象,如下:

@{
var p = (Products)ViewData["person"];
}
<h1>@p.Id</h1>
<h2>@p.Name</h2>
<h3>@p.Price</h3>

方式2:ViewBag

将控制器中的方法利用ViewBag动态表达式的形式存储上述对象,如下:

ViewBag._Product = p;

修改视图,如下:

@{
var p = (Products)ViewBag._Product;
}

方式3:Model

将控制器中的方法返回View上述对象,如下:

public ActionResult Index()
{
var p = new Products()
{
Id = 1,
Name = "饮料",
Price = 2.5
};
return View(p);
}

而我们在视图中得到强制类型对象Products,如下:

@using MvcTest.Models;
@model Products
@{
ViewBag.Title = "Index";
}
<h1>@Model.Id</h1>
<h2>@Model.Name</h2>
<h3>@Model.Price</h3>

方式4:TempData

TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除。

下面我将演示从Index动作转向Order动作,并在视图中输出TempData中存储的值。

首先在控制中新建Action方法,命名为Order方法,代码如下:

public ActionResult Index()
{
var p = new Products()
{
Id = ,
Name = "饮料",
Price = 2.5
};
TempData["_product"] = p;
return RedirectToAction("Order");
}
public ActionResult Order()
{
      return View();
}

修改视图如下:

@{
Products p = (Products)TempData["_product"];
}

假设控制器中的代码修改如下:

public ActionResult Index()
{
var p = new Products()
{
Id = ,
Name = "饮料",
Price = 2.5
};
TempData["_product"] = p;
return RedirectToAction("Order");
}
public ActionResult Order()
{
return RedirectToAction("Detail");
}
public ActionResult Detail()
{
Products _product = (Products)TempData["_product"];
return View("");
}

转向:Index — Order — Detail,那么在Detail方法中,是不能获取到TempData对象的,因为TempData只能经过一次传递,之后会被系统自动清除。

输出结果

源码下载

ASP.NET MVC之控制器传递数据到视图的四种方式的更多相关文章

  1. ASP.NET MVC学习——控制器传递数据到view的简单案例

    从控制传数据到view端的方法: 方法一:修改Control数据,添加ViewBag 1.ViewBag.+ 任意变量名 = "你想要输入的数据" 2.在Control对应的csh ...

  2. ASP.NET MVC 5 学习教程:控制器传递数据给视图

    原文 ASP.NET MVC 5 学习教程:控制器传递数据给视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字 ...

  3. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  4. ASP.NET MVC之从控制器传递数据到视图四种方式(一)

    前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...

  5. ASP.NET MVC之从控制器传递数据到视图四种方式

    前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...

  6. ASP.NET MVC 在控制器中获取某个视图动态的HTML代码

    如果我们需要动态的用AJAX从服务器端获取HTML代码,拼接字符串是一种不好的方式,所以我们将HTML代码写在cshtml文件中,然后通过代码传入model,动态获取cshtml中的HTML代码 当然 ...

  7. MVC ,Action方法传数据给视图有几种方式?--PS:tempData和Viewbag,还有ViewData之间的区别

    //---------------------------------控制器向视图传递数据 public ActionResult TransData() { //1.ViewBag ViewBag. ...

  8. ASP.NET MVC之从控制器传递数据到视图方式

    为了演示,先定义一个类 新建基本项目在Models文件夹下定义如下类: public class Person { public int Id { get; set; } public string ...

  9. [Asp.net mvc]Asp.net mvc 使用Json传递数据

    在之前的练习中一直是直接传递的Model到后台或是单个数据到后台,今天在使用中遇到了点问题,不能使用Model传递到后台,但又要实现多个数据到后台,实验了多次有了以下的解决方案,给自己留个笔记. 功能 ...

随机推荐

  1. C# FileSystemWatcher 监视磁盘文件

    C# FileSystemWatcher 监视磁盘文件变更 简化需求:有一个简化了的需求是这样的:有一个拍照程序在运行,一旦抓拍之后则将图片文件存储至某目录,然后图片要上传至远程服务器并update数 ...

  2. JavaScript插件——标签页

    JavaScript插件——标签页 前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.html ...

  3. [转]Mac OS X local privilege escalation (IOBluetoothFamily)

    Source: http://joystick.artificialstudios.org/2014/10/mac-os-x-local-privilege-escalation.html Nowad ...

  4. WPF中StackPanel的使用方法

    StackPanel 1.StackPanel:释义为是最简单的控制面板,它把其中的UI元素按横向或纵向堆积排列. 2.常用属性:width:获取或设置元素的宽度.Orientation:用于控制面板 ...

  5. 验证码生成组件--JCaptcha的使用

    以下为项目中所用代码,文笔有限,直接上代码. 所需jar包: 是否需要其他依赖包,不详 web.xml <servlet> <servlet-name>Jcaptcha< ...

  6. Attempted to lock an already-locked dir异常解决方法

    有时候因网络太慢或中断 就会出现这种锁定状态 Attempted to lock an already-locked dir svn: Working copy 'D:\MyEclipse\mypro ...

  7. Simditor使用方法

    一不小心接触到Simditor,瞬间被它优美极简的界面所吸引.Simditor是Tower开源的所见即所得的在线富文本编辑器. Simditor的理念是保持简单,避免过度的功能,每一个特性都追求极致的 ...

  8. 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)

    转自:http://www.kwstu.com/ArticleView/netmvc_201511132050268716 最近开发手机app需要实现移动支付功能,由于考虑支付安全将微信支付生成签名写 ...

  9. 解决GOOGLE不能用的办法

    解决GOOGLE不能用的办法 首先平时用用百度还是足够了,但是说实话,百度在进行一些尝试搜索时真的没GOOGLE好用,经常找到一大堆广告,却不是自己想要的,比如搜索里面的双引号.and.site.fi ...

  10. #define命令的一些高级用法

    =========================================================== define中的三个特殊符号:#,##,#@ ================= ...