View(视图)的职责是向用户提供界面,负责根据提供的模型数据生成准备提供给用户的格式界面,并提供用户与系统交互的入口。

View和Action之间前后台数据传递的方式

弱类型 ViewData[“paramName”]
动态类型 ViewBag[“paramName”]
强类型 Model
临时存储 TempData[“paramName”]
后台:return View(data) //存入ViewData.Model
前台:Model //其实就是WebViewPage.Model

Controller控制器:

Demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVC_Project01.Controllers
{   /// <summary>
    /// 控制器
    /// </summary>
    public class HomeController : Controller
        // GET: Home
        //动作方法:Index()
        public ActionResult Index()
            int[] nums = {10,20,30,40,50,60};
            //ViewBag.numsArrayCount = nums.Length;
            ViewBag.date = DateTime.Now;
            ViewData["numsArrayCount"] = nums.Length;
            TempData["newType"] = "体育新闻";
		    //强类型视图传递Model数据
            return View(new User() { Name="jack", Age=25, Gender="male", Address="USA"});//对应的view:Index  不区分大小写
        public ActionResult NewList()
            return View();//对应的view:NewList     不区分大小写

使用ViewBag属性给当前动作方法对应的view传递临时参数
格式:
ViewBag.key=value;

使用ViewData属性给当前动作方法对应的view传递临时参数

格式:
ViewBag[key]=value;

传递的参数既可以是简单类型,也可以是复杂的数据类型(对象、数组、集合等等)

问题:
如果在Action动作方法里,不使用模型传参的方式(将model传递到View()方法),而是使用ViewBag、ViewData、TempData传递对象参数给View视图,在前台View中需要获取对象属性或者调用方法又该如何处理?

Demo:
准备实体类User:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVC_Project05.Models
    public class User
        public int UserId { get; set; }
        public string UserName { get; set; }
        public int Age { get; set;}
        public string Telephone { get; set; }

在Controller中添加动作方法:

 public ActionResult GetCurrentTime() {
            User user = new User() {
                UserId=10101,
                UserName="paul gasol",
                Age=36,
                Telephone="0568-5598565-9612"
            //注意: View(string viewName) 传入的时候切记如果是字符串类型,一定是视图名称
            ViewBag.Message = "you are my destinty!";
            ViewBag.Date = DateTime.Now;
            ViewBag.User = user;
            return View();
            //return View(DateTime.Now);

添加Action方法对应的View视图GetCurrentTime.cshtml,然后在该视图中获取Action传递的数据:

model关键字指定视图的模型类型 强类型视图:实际上就是给视图声明了一个类型参数, 渲染视图时必须强制传入对应的类型对象 ( 在对应的动作方法里,必须在View()方法里传入Model), 否则将引发异常 @*@model DateTime*@ @*引入Model类所在命名空间*@ @using MVC_Project05.Models Layout = null; <!DOCTYPE html> <meta name="viewport" content="width=device-width" /> <title>获取当前时间</title> </head> @*<p>当前时间:@Model.ToShortTimeString()</p>*@ 当接收从Acton传递来的参数(非Model传参方式) 使用ViewBag、ViewData、TempData 可以在Rasor表达式中先获取传递的对象,再获取其属性, 或调用其方法获取一些值 DateTime date = @ViewBag.Date; string currentDate = date.ToShortTimeString(); User user = @ViewBag.User; string userName = user.UserName; int userId = user.UserId; int age = user.Age; string telephone = user.Telephone; <p>Current Time:@currentDate</p> <p>用户个人信息:</p> <p>用户编号:@userId</p> <p>用户姓名:@userName</p> <p>年龄:@age</p> <p>电话号码:@telephone</p> </div> </body> </html>

Result:
在这里插入图片描述

分析:
对于自定义实体类,在前台View中,如果在Rasor表达式要使用,首先需要使用@using表达式引入其所在命名空间

注意:
ViewBag和ViewData只能向当前view传递数据
但是TempData可以向不同的Action传递数据,但是TempData的值在取了一次之后将被自动删除。

TempData的目的:
在一次请求中同时执行的多个Action之间共享数据

那么就可以在Action方法对应的view中获取共享数据

Index动作方法对应视图Index.cshtml:
在视图中读取在Action动作方法中传递的数据

使用@model语句声明通过动作方法传递给该视图模型对象(Model)的类型 @model MVC_Project01.Models.User Layout = null; <!DOCTYPE html> <meta name="viewport" content="width=device-width" /> <title>首页</title> <style> list-style:none; </style> </head> <p>这是首页,欢迎光临!</p> <label>Number Count:</label> @*@ViewBag.numsArrayCount*@ @ViewData["numsArrayCount"] <p>时间: @ViewBag.date</p> @*<p>新闻类型: @TempData["newType"]</p>*@ 使用@Model来引用视图模型对象的方法、字段或属性 <li>UserName:@Model.Name</li> <li>Age:@Model.Age</li> <li>Gender:@Model.Gender</li> <li>Address:@Model.Address</li> </div> </body> </html>

在NewList动作方法对应的视图NewList.cshtml中,获取在Index动作方法中,使用TempData传递的数据

Layout = null; <!DOCTYPE html> <meta name="viewport" content="width=device-width" /> <title>新闻列表页</title> </head> <p>这是新闻列表页,欢迎光临!</p> <p>新闻类型: @TempData["newType"]</p> </div> </body> </html>

总结:
ViewData是字典型(Dictionary)(object类型),而ViewBag不再是字典的键值对结构,而是dynamic类型,dynamic类型与object类型的区别是在使用时dynamic会根据数据类型自动转换,而object类型则需要我们手动进行强制转换。

ViewData和ViewBag传递参数的生命周期和当前View相同,view加载完毕,其参数也被释放掉了。
TempData在同一个Controller中可跨多个Action动作方法传递参数,但只要取了一次就会被自动删除,起到的是一种共享数据的作用。

从FirstViewController跳转到SecondViewController,当从SecondViewController返回时,如果想把数据回传给FirstViewController,可以用代理的方法,FirstViewController这样使用:FirstViewController.h @interface FirstViewController : UIViewControl #import “ViewController.h” #import “SecondViewController.h” //新建一个类@interface SecondViewController 继承于 NSViewController //在ViewController上弹出SecondViewController //及一个视图控制器,弹出另外的一个视图控制器 @implementation... 在ViewController之间传递数据的方法有不少,博主这里总结两种最常用的方法给大家: 我们假设有 视图控制器A 和 视图控制器B,其我们设视图控制器B 是由 视图控制器A通过Navigation controller Push过去的,也就是说视图控制器B是视图控制器A的子视图控制器。 下面我们就分别通过 A->B 和 B->A传递数据说明两种在视图控制器之间传递数据的方法。     一、UIViewController自身之间的调用:[self presentModalViewController :UIViewController animated:YES]; 对应的返回操作函数:[self dismissModalViewControllerAnimated :YES];这... create or replace package vm_param is function set_userid(user_ids varchar2) return varchar2; function get_userid return varchar2; function set_SHIFT_NAME(SHIFT_NAMES ... 跑 demo 播测,需要使用 adb 命令拉起播测 demo,并传必要的参数将值带给我。 其有个播放地址的值,传过来时发现值不完整,缺少了一部分。 后面发现是存在特殊字符,传参时导致了截断,故不完整。只需要特殊编码或者处理下就好。 获取传参值的代码为: private void testIntentData() { System.out.println("> --- testIntentData ---"); 20 个答案:答案 0 :(得分:113)如前所述,你做不到。可能的解决方案是实现存储的函数,例如:CREATE FUNCTION v_emp (@pintEno INT)RETURNS TABLEASRETURNSELECT * FROM emp WHERE emp_id=@pintEno;这允许您将其用作普通视图,其包含:SELECT * FROM v_emp(10)答案 1 :(得分:31... 请注明转载地址:http://www.cnblogs.com/arhat 在上一章,我们把Razor的模板技术给大家介绍了一下,当然模板还有其他的知识点,这个以后我们还会继续讲解。本章我们主要讨论一下View如何从Action取得数据。可以说本章所讲的知识起到了一个承上启下的作用,因为Action负责传递数据,View负责显示数据,那么问题就是Action如何把数据传递给View了呢?这... Spring MVC3在controller和视图之间传递参数方法:一, 从controller往视图传递值,controller---->视图1)简单类型,如int, String,直接写在controller方法的参数里,是无法传递到视图页面上的(经测试)。(而用@RequestParam("name")注解,可以从视图上,或地址加?name=***传递到controller方法里)... 老问题,但这里的代码是关于如何做你要求的 . 在这种情况下,我将数据从表视图的选定单元格传递到另一个视图控制器 .在trget视图的.h文件:@property(weak, nonatomic) NSObject* dataModel;在.m文件:@synthesize dataModel;dataModel 可以是 string , int ,或者在这种情况下它是一个包含很多项目的模型-...           在做ITOO的过程,遇到了一个问题,就是页面和页面之间跳转参数传递的问题。           这里前台使用的是easyUI的组件,第一个页面查看考生登录情况,其有一个详情,点击之后,会跳转到第二个页面。           第二个页面需要第一个页面的一些参数,你所选的该行的各个参数,考试、考场、考试日期和时间等等,查询并显示该场           在做ITOO的时候,有一个需求,就是考生登录情况的模糊查询功能,用到了第一个页面的参数,但是,这里的模糊查询事件是在第二个页面触发的。           首先,第一个页面在跳转到第二个页面的时候,进行参数的传递,把用到的参数传递给Controller,然后,使用ViewData从Controlle