您的位置:首页 > 其它

浅谈 MVC中的ViewData、ViewBag和TempData

2017-02-13 23:27 911 查看
ViewBag和TempData的区别

ViewDataViewBag
它是Key/Value字典集合它是dynamic类型对像
从Asp.net MVC 1 就有了ASP.NET MVC3 才有
基于Asp.net 3.5 framework基于Asp.net 4.0与.net framework
ViewData比ViewBag快ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型在ViewPage中查询数据时不需要类型转换
有一些类型转换代码可读性更好
在控制器(Controller)中使用

ViewData:

Controller里取数据赋值

var markeType = new MarketDataProvider().GetBTIDData().Where(a=>a.ID!="0"); //在数据库获取数据,这是list数据
ViewBag.DateType = markeType;//给ViewBag.DateType 赋值  “DateType ”可以随便写名称。


* 前台调用

@foreach (var modelMarket in ViewData["Markettype"] as Dictionary<string, string>)
{
<div class="row" style="margin-top:10px">

<div class="col-md-4 text-right"><span class="red">*</span> @modelMarket.Value</div>
</div>
}


  

ViewBag

Controller里取数据赋值

string str = "商标,版权,交易,国际注册";

string[] strs = str.Split(',');

Dictionary<string, string> dic = new Dictionary<string, string>();

for(int i=0;i<5;i++)

{

dic.Add(i.ToString(),strs[i]);

}

ViewData["Markettype"] = dic;


  

前台调用:

@foreach (var modelMarket2 in ViewBag.DateType)

{

<div class="row" style="margin-top:10px">

<div class="col-md-4 text-right"><span class="red">*</span> @modelMarket2.Text</div>

</div>

}


按F12运行网站便可以看到运行结果,两个也可以用于不分页的新闻列表。

TempData

TempData也是字典,所以它的使用完全等同于ViewData,但两者之间还是存在很大的差异。

TempData,顾名思义,就是临时数据。TempData保存在Session中,Controller每次请求的时候都会从Session中获取TempData,然后清除Session。基于这样的事实,在每次请求结束后,TempData的生命周期也就结束了。网上有一句话:TempData至多之只能通过一次Controller传递,假设我们的Controller是跳转到下一个Controller,以此类推,在最后一个Controlle相应的视图上,的确可以获得该TempData。但是,这并不是说TempData已经跨请求传递了,这依然只是一次请求,至于是否是跨Controller传递,我认为不是,所谓的通过Controller传递,是指将TempData传递给View,在上面的例子中,只有最后的Controller才会将该TempData传递给View,所以,TempData的确是只能通过一次Controller传递。

注:有的文字内容搜自博客园。





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: