ASP.NET MVC Controller向View传值的几种方式
上几篇博文提到MVC和WebForm的区别,主要是MVC的Controller和View将传统的WebForm的窗体和后台代码做了解耦,这篇博文简单介绍一下在MVC中Controller向View是如何传值的。
有点MVC基础的都知道,Controller向View传值主要有四种途径,下面将一一介绍。
1)ViewBag
ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
控制器代码:
- public ActionResult Index()
- {
- ViewBag.name = "周江霄";
- ViewBag.message = "欢迎使用MVC设计模式~~";
- return View();
- }
视图代码:
- <div>
- <!--利用HtmlHelper创建TextBox时,使用名称与ViewBag中的Key一致, 就会自动实现值绑定-->
- @Html.TextBox("name")
- @ViewBag.message
- </div>
效果显示:
2)ViewData
ViewData只对当前Action有效,它是一个字典集合,通过key值读取对应的value;
控制器代码:
- public ActionResult Index()
- {
- ViewData["name"] = "周江霄";
- ViewData["message"] = "欢迎使用MVC设计模式~~";
- return View();
- }
视图代码:
- <div>
- <!--利用HtmlHelper创建TextBox时,使用名称与ViewData中的Key一致, 就会自动实现值绑定-->
- @Html.TextBox("name")
- @ViewData["message"]
- </div>
效果显示:
3)TempData
使用TempData和使用ViewData方法是一样的,但是它可用于在不同的Action之间传值,这是ViewData做不到的。
控制器代码:
- public class MVCController : Controller
- {
- public ActionResult Index1()
- {
- TempData["name"] = "周江霄";
- return View();
- }
- public ActionResult Index2()
- {
- string strName = TempData["name"].ToString()
- return View();
- }
上面的代码中,Index()给TempData添加了一个键值对,假设我们先请求Index这个Action,接着请求Index2这个Action,那么在Index2中,我们便可以得到之前添加到TempData的键值对。有趣的是,这时如果再次请求Index2,那么从TempData中读到的MyName的值会是null。这是因为TempData和一个临时的Session差不多,当Acion执行的时候它做为一个全局对象保存的内存中,而一旦Action的执行完成,就会释放内存空间,这就是它与ViewData最大的不同之处。
4)Model
Controller通过Model传值应该是MVC中使用最为普遍的一种传值方式,通过强类型绑定,在View中可以很方便的通过Model的相应属性得到想要的值。
Model代码:
- public partial class YzAdministratorEntity
- {
- public YzAdministratorEntity()
- {
- this.YzClearRecordEntity = new HashSet<YzClearRecordEntity>();
- this.YzNotifyInfoEntity = new HashSet<YzNotifyInfoEntity>();
- }
- public System.Guid ID { get; set; }
- public string AdminPassword { get; set; }
- public string AdminName { get; set; }
- public bool isUsed { get; set; }
- [Required(AllowEmptyStrings = false, ErrorMessage = "用户ID不能为空")]
- public string AdministratorID { get; set; }
- public string AdminLevel { get; set; }
- public virtual ICollection<YzClearRecordEntity> YzClearRecordEntity { get; set; }
- public virtual ICollection<YzNotifyInfoEntity> YzNotifyInfoEntity { get; set; }
- }
视图代码:
强类型绑定:
- @model Model.YzAdministratorEntity
通过Linq自动匹配Model和Label或TxtBox的属性值:
- <div>
- <span class="editor-label">
- @Html.Label("编号:")
- </span>
- <span class="editor-field">
- @Html.EditorFor(a => a.AdministratorID)
- @Html.ValidationMessageFor(model => model.AdministratorID)
- </span>
- </div>
- <div>
- <span class="editor-label">
- @Html.Label("密码:")
- </span>
- <span class="editor-field">
- @Html.EditorFor(a => a.AdminPassword )
- </span>
- </div>
- <div>
- <span class="editor-label">
- @Html.Label("真实姓名:")
- </span>
- <span class="editor-field">
- @Html.EditorFor(a => a.AdminName )
- </span>
- </div>
ASP.NET MVC Controller向View传值的几种方式的更多相关文章
- ASP.NET MVC Controller向View传值方式总结
Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...
- MVC教程四:Controller向View传值的几种方式
一.通过ViewData传值 MVC从开始版本就一直支持使用ViewData将Controller里面的数据传递到View.ViewData定义如下: 从上面的截图中可以看出,ViewData里面存的 ...
- ASP.NET MVC 控制器向View传值的三种方法
转自:http://www.cnblogs.com/shinima/p/3940452.html 1.提供视图模型对象 你能把一个对象作为View方法的参数传递给视图. public ViewResu ...
- 第三节:Action向View传值的四种方式(ViewData、ViewBag、TempData、Model)
简 介 在前面的章节中,我们已经很清楚,MVC工作模型的流程,Controller中的Action接收到客户端的请求,处理后要将数据返回给View,那么Action中是如何将数据返回给View的,二 ...
- MVC中控制器向视图传值的四种方式
MVC中的控制器向视图传值有四种方式分别是 1 ViewDate 2.ViewBag 3.TempDate 4.Model 下面分别介绍四种传值方式 首先先显示出控制器中的代码 using S ...
- MVC Controller向View传值(ViewData与ViewBag)
近期在开发项目中,使用的是ASP.NET MVC因为之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习. 一:使用 ViewData使用: public ActionResult I ...
- MVC Controller 与 View 传值
Controller 到 View 1 强类型 控制器 // GET: /Test/ public ActionResult Index() { DateTime date = DateTime.No ...
- ASP.NET MVC post请求接收参数的三种方式
1.在控制器中建立一个PostDemo方法,建立视图创建一个表单 <h2>PostDemo</h2> name的值:@ViewBag.name <br /> nam ...
- Asp.Net MVC Control向View传值
1.通过View(Parameter)参数传值 Control: namespace MyMVCDemo.Controllers { public class PersonControlle ...
随机推荐
- Hiver 操作 MySQL 导致锁表
Hadoop 搬迁到新集群后,操作主库 MySQL 导致了锁表...sad 具体锁表时间点 : 2016-1-14 14:31 到 2016-1-14 14:36 之间 在 oradba 的 ...
- mongo数据库备份与恢复
备份:mongodump -h xx --port 27017 -u user -p pass -d database -o D:\backup\database 恢复:mongorestore -h ...
- .net core 单元测试小记
创建项目,选择.net core的类库(class library) 修改project.json的配置 { "version": "1.0.0-*", &qu ...
- Faster-R-CNN编译使用及相应问题解决
1.首先opencv是需要安装的,我用的ubuntu14.04,opencv3.0,具体安装教程可以参考网上很多,不想多提. 2.安装几个依赖包:cython,python-opencv和easydi ...
- C#字符串常见操作总结
string类常用的方法和总结小记
- JAVA 并发编程关键点
上下文切换 死锁 volatile synchronized 原子操作 happens-before as-if serial 锁的内存 final 线程:daemon start suspend r ...
- WebService第一天
WebService第一天 [课程安排]: 整体安排:2天: 第一天:webservice入门,JDK规范和实现:jax-ws,相关概念 第二天:CXF框架,和spring的集成开发.Hessian的 ...
- Python查询MySQL进行远程采集图片实例
这是四五年以前做小说站采集图片时写过唯一一次 Python 代码 #!/usr/bin/python #-*-coding:utf-8-*- import MySQLdb, os, socket, t ...
- java-成员方法/变量、类方法/变量等区别
方法 成员方法 成员方法也叫实例方法.必须先有实例即对象,然后才能通过实例调用该实例方法. 类方法 和类变量一样,有关键字static修饰,可以不用实例,直接用类就可以调用类方法. 变量 成员变量 也 ...
- JavaScript的DOM(文档对象)基础语法总结1
---恢复内容开始--- 前言:HTML文档可以说由节点构成的集合,DOM节点有: 1). 元素节点:上图中<html>.<body>.<p>等都是元素节点,即标签 ...