vs传值接收页面怎么直接打开_MVC 向页面传值方式总结

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

ViewBag

ViewData

TempData

向普通View页面传一个Model对象

向强类型页面传传一个Model对象

用一个ViewModel对象解决所有问题

首先我们需要明确的是我们从controller向view传值的时候,这些方式分别处于什么样的地位:

我们一般会向页面传递一个主要的类型的数据,一般是情况下是一个List,如果只有这个,很好办,一个model对象就解决了,但是往往除此之外还会有一些额外的零散的数据需要传递,比如分页的pageIndex,或者pageCount等等,这样的数据用原有的model就无能为力了,这时候,我们就可以用ViewBag、ViewData、TempData来传递这些额外的数据。

视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。如:

control控制器

publicActionResult Index()

{

Listcolors= newList();

colors.Add("red");

colors.Add("green");

colors.Add("blue");

ViewData["listColors"]=colors;

ViewData["dateNow"]=DateTime.Now;

ViewData["name"]= "Hajan";

ViewData["age"]= 25;returnView();

control 控制器

publicActionResult Index()

{

Listcolors= newList();

colors.Add("red");

colors.Add("green");

colors.Add("blue");

ViewBag.ListColors=colors;//colors

isList

ViewBag.DateNow=DateTime.Now;

ViewBag.Name= "Hajan";

ViewBag.Age= 25;returnView();

}

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

View

对应前台视图:

1.使用ViewData

My name is @ViewData["name"] ,

I like the following colors:

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

{

@color

}

@ViewData["dateNow"]

2.使用ViewBag

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

I like the following colors:

@foreach (var color in ViewBag.ListColors)

{

@color

}

@ViewBag.DateNow

效果图:

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的用法示例:

publicActionResult Index()

{var model = newReview()

{

Body= "Start",

Rating=5};

TempData["ModelName"] =model;return RedirectToAction("About");

}

 
 
publicActionResult About()

{var model= TempData["ModelName"];returnView(model);

}

普通页面传递model:

//Action代码

publicActionResult Index()

{

Product p= newProduct();

p.Name= "Toy";returnView(p);

}

在View中调用的代码:

Product :

向强类型试图传递model

1、WebForm Engine的试图的实现:

//Aciton的代码

publicActionResult Index()

{

Product p= newProduct();

p.Name= "Toy";returnView(p);

}

View中的代码

声明类型" %>直接用Model调用该对象

Product Name:

2、Razor Engine的实现:

在Razor中声明类型的方式:

@model Mvc3App.Models.Product

在Razor中调用对象的方式:

Product: @Model.Name

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值