前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET MVC 3中ViewBa

ASP.NET MVC 3中ViewBa

作者头像
py3study
发布2020-01-06 16:30:50
8780
发布2020-01-06 16:30:50
举报
文章被收录于专栏:python3python3

ViewBag, ViewData十分类似,都可用于把数据从controller传递到view。

ViewBag是WebViewPage中的一个属性,它的类型是dynamic。dynamic类型可以理解为,编译器在编译到这种类型时,会跳过类型检查,而在运行时做这些事情。

ViewData也是WebViewPage类中的一个属性,但他的类型是ViewDataDictionary。从内部实现上,ViewBag属性是按照键值对那样存放在ViewData中的,因此也可以通过方为ViewData中值来访问ViewBag的值,他们指向的引用是同一个的。但是区别在于,ViewData的写法是按照序列访问那样,通过索引访问,而ViewBag是通过属性访问。事实上,在编译阶段,编译器无法知道ViewBag所给的属性是否存在,这都是在运行时决定的。举个例子,ViewData["Index"]可以写成:ViewBag.Foo,而不需要担心编译时错误。

我们可以通过下面的例子来验证ViewBag和ViewData其实指向的对象是同一个。

@{

ViewBag.XXX = new StringBuilder("222");

ViewData["XXX"] = new StringBuilder("333");

}

<pre>

ViewBag的类型是 @ViewBag.GetType();

ViewData的类型是 @ViewData.GetType();

ViewBag.XXX 的值是 @ViewBag.XXX

ViewData["XXX"]的值是 @ViewData["XXX"]

@(ViewBag.XXX == ViewData["XXX"])

@(ViewBag.XXX.Equals(ViewData["XXX"]))

@ViewBag.XXX.GetHashCode()

@ViewData["XXX"].GetHashCode()

</pre>

得到的结果如下:

CB60685BC69A43ACB6482264AB522340
CB60685BC69A43ACB6482264AB522340

可以看到对ViewData["XXX"]做更改,会影响到ViewData.XXX。后续的例子有证明了他们是指向同一个引用的。

在使用ViewBag的时候,有一个好处就是不需要做类型转换。因为是dynamic类型,只要保证在运行时的类型正确既可以了。举个例子:

@{

ViewBag.XXX = new List<int>{1,2,3};

ViewData["YYY"] = new List<int> { 3, 4, 5 };

foreach (var i in ViewBag.XXX)

{

@i

}

foreach (var i in ViewData["YYY"] as List<int>)

{

@i

}

}

无论是ViewBag还是ViewData,都仅仅对当前的请求有效,他们的生命周期很短,无法存在于多个请求中。

TempData的出现可以存在多个请求,但是,也被限制于当前请求和下一次请求(通常是Redirect)。它的内部实现是使用了Session。

public void Index(){

TempData["text"] = "123456";

RedirectToAction( "Test1" );

//RenderView("Index");

}

public void Test1(){

string text = TempData["text"] as string;

RenderView("Test1");

}

public void Test2(){

string text = TempData["text"] as string;

RenderView("Test2");

}

如上面的例子,Index中的TempData可以在跳转到Test1的时候获得,但不能在Test2中获得。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档