MVC 向页面传值方式总结

总结发现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属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。如:

control控制器

public
ActionResult Index()

{

List<string>
 colors = new
List<string>();

colors.Add("red");

colors.Add("green");

colors.Add("blue");

ViewData["listColors"]
 = colors;

ViewData["dateNow"]
 = DateTime.Now;

ViewData["name"]
 = "Hajan";

ViewData["age"]
 = 25;

return
View();

control 控制器

public
ActionResult Index()

{

List<string>
 colors = new
List<string>();

colors.Add("red");

colors.Add("green");

colors.Add("blue");

ViewBag.ListColors = colors;
//colors
 is List

ViewBag.DateNow
 = DateTime.Now;

ViewBag.Name
 = "Hajan";

ViewBag.Age
 = 25;

return
View(); 

}

你和上面的对比 你看见了不同吗?

View

对应前台视图:

1.使用ViewData

<p>

My name is <b>@ViewData["name"] </b>,

<b>

<br />

I like the following colors:

</p>

<ul id="colors">

@foreach (var color in ViewData["listColors"] as List<string>)

{

<li><font color="@color">@color </font></li>

}

</ul>

<p>

@ViewData["dateNow"]

</p>

2.使用ViewBag

<p>

My name is < b>@ViewBag.Name</b>, <b>@ViewBag.Age</b> years old.

<br />

I like the following colors:

</p>

<ul id="colors">

@foreach (var color in ViewBag.ListColors)

{

<li><font color="@color">@color</font> </li>

}

</ul>

<p>

@ViewBag.DateNow

</p>

效果图:

ViewBag、ViewData 和 TempData 的区别:

ViewData 和 TempData 都可以传递弱类型数据,区别如下:

ViewData 只在当前 Action 中有效,生命周期和 View 相同;

TempData 的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。

TempData 一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。

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=5
            };
    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>
时间: 2024-11-10 14:12:39

MVC 向页面传值方式总结的相关文章

MVC中页面传值方式总结

MVC中的页面传值,通常指Controller和view之间的数据传递,经常用到的有几种方式,总结如下: 一.Controller----------->View 1.ViewData 获取或设置一个字典,其中包含在控制器和视图之间传递的数据.使用ViewData是采用键值对的形式,对所定义的数据进行传递.在View中会自动识别到拥有唯一键值的ViewData,并将数据显示出来. 例子: public ActionResult() { <span style="white-space

微信小程序--常用的页面传值方式

记录小程序中常用的几种页面传值方式 一.storage wx.setStorage({ key: "key", data: value }) 通过getStorage回调方式获取data值,或者通过wx.getStorageSync(key) 同步获取key对应的data值 #### 二.url传值 url传值也是经常都能用到的 ##### 1.url传递通过字符串拼接传递key=value形式的参数 wx.navigateTo({ url: '/pages/index/index?i

MVC[xml]页面传值

MVC 各种传值方式 ViewData传值.HomeController.cs Co de: public ActionResult Index(){      ViewData["Title" ] = "Home Page" ;     ViewData["Message" ] = "Welcome to ASP.NET MVC!" ;     return View();} Views/Home/Index.aspx Co

Asp.Net页面传值方式总结

通过学习asp.net,其中讲到最多的便是控件的使用,而控件使用中最大的不同便是在对页面进行传值时,与C/S学习中有很大的不同.视频中讲的比较零碎,把那些搬来总结一下. 在asp.net中新建一个web窗体的表单(form1),在表单中进行提交数据. <span style="font-size:18px;"><form id="form1" method="post/get" action ="WebForm1.as

ios常见的页面传值方式

iOS页面间的传值细分有很多种,基本的传值方式有三种:委托Delegate传值.通知NSNotification传值.Block传值,其他在项目中可能会遇到的还有:UserDefault或文件方式传值.单例模式传值.通过设置属性传值,再有其他的传值方式没有遇到使用过在此不做说明.场景适合,自己使用舒服就是好的方式. 在iOS开发的过程中,常见的页面跳转传值方式大致可以分为两种,现归纳总结一下: 第一种:OneViewController页面跳转到TwoViewController页面(即顺传)

asp.net的页面传值方式

页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer. 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.

Spring MVC 向页面传值-Map、Model和ModelMap

除了使用ModelAndView方式外.还可以使用Map.Model和ModelMap来向前台页面创造 使用后面3种方式,都是在方法参数中,指定一个该类型的参数.例如: Java代码 1 @RequestMapping("/test") 2 public String test(Map<String,Object> map,Model model,ModelMap modelMap){ 3 4 map.put("names", Arrays.asList

java 控制器向页面传值方式

1.单个字符串 @RequestMapping(value = "list", method = RequestMethod.GET) public ModelAndView list(Integer investorApplyId) { ModelAndView model = new ModelAndView( "daybusiness/InvestorApplyDetail/list"); model.addObject("investorApply

java mvc控制器基本传值方式

控制器----- @RequestMapping(value = "MatchDetail", method = RequestMethod.GET) public ModelAndView Match_Detail() { ModelAndView model = new ModelAndView("daybusiness/MatchDetails/MatchDetail"); List<MatchDetail> aaa=new ArrayList&l