MVC:Controller向View传值方式总结

Controller向View传值方式总结

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

ViewBagViewDataTempData向普通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= 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>

 

 

ViewModel                                                                            

我们可以用一个ViewModel来实现model和其他三个额外传值的对象的职能,具体具体的实现方式,请看另外一篇文章:

http://www.cnblogs.com/key1309/p/3489191.html

 

 

 

本文章总结自: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/

两篇文章

 

转载于:https://www.cnblogs.com/key1309/p/ViewData_TempData_ViewBag_ViewModel_controller%e5%90%91View%e4%bc%a0%e5%80%bc.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值