MVC中,ViewData的注意事项
2014-09-15 00:23
344 查看
ViewData:
msdn上的解释是:获取或设置一个字典,其中包含在控制器和视图之间传递的数据。
从其字面意义上来讲,view的data,用来传递数据的,在MVC4中,常用的还有viewbag来传递数据。
ViewData与ViewBag的区别
1、ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value, ViewData["myName"]
2、ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
3、ViewBag和ViewData只在当前Action中有效,等同于View
4、ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData
下面说正题:
为什么我要让你们慎用呢,还得从我3个月前做的一个项目开始说起
3个月前,基于asp.net MVC4做了一个网站
在一个action里,return到其他view的时候,发现需要传递一个id参数,用什么来传呢?
(A action return到 B action)
我直接就想到了用viewdata,在A action里,设置了一个viewdata["id"]="xx";
然后在B action里获取这个id的值,很方便,就这2行代码,省事。
运行也没出什么问题,完美运行。
但项目上线后,客户老是说,你的网站怎么总是崩溃呀,总是进不去,查看服务器日志,找不到原因,还以为是数据库的原因,于是开始了漫长的Debug日子,这Debug长达3个月,各种问题都找遍了,各种代码都优化了,问题还是出现,于是没办法,只能定期重启iis,几十分钟重启一次,但这样会出现session丢失,客户也抱怨,体验不好,老是重新登录。
后来无意间,在优化网站过程中,去掉了viewdata来传值,居然发现网站就不会崩溃了,很纳闷。
这个问题,google,百度也没找到相关的资料,于是自己研究了一下,我猜估计是viewdata,是存在与当前action里的,但我是Aaction直接return了Baction,估计这个return的过程中,两个action都在调用,因为是在A
action里声明创建,而return到B action里,将这个viewdata传递过来后,因为Viewdata只对当前action有效,离开则销毁,但这种情况下,我销毁的是B action,所以导致这个viewdata一直没法销毁,网站就崩溃。
以前看到过有篇文章说,viewdata的数据只需要几k或者几十k就足以导致网站崩溃,或许就是这个原因把。
这个坑,坑了我几个月,希望此文章能献给MVC开发中,跟我范同样错误的朋友借鉴参考。
至于我的猜测,是否准确,还希望大牛来指出。
msdn上的解释是:获取或设置一个字典,其中包含在控制器和视图之间传递的数据。
从其字面意义上来讲,view的data,用来传递数据的,在MVC4中,常用的还有viewbag来传递数据。
ViewData与ViewBag的区别
1、ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value, ViewData["myName"]
2、ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
3、ViewBag和ViewData只在当前Action中有效,等同于View
4、ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData
下面说正题:
为什么我要让你们慎用呢,还得从我3个月前做的一个项目开始说起
3个月前,基于asp.net MVC4做了一个网站
在一个action里,return到其他view的时候,发现需要传递一个id参数,用什么来传呢?
(A action return到 B action)
我直接就想到了用viewdata,在A action里,设置了一个viewdata["id"]="xx";
然后在B action里获取这个id的值,很方便,就这2行代码,省事。
运行也没出什么问题,完美运行。
但项目上线后,客户老是说,你的网站怎么总是崩溃呀,总是进不去,查看服务器日志,找不到原因,还以为是数据库的原因,于是开始了漫长的Debug日子,这Debug长达3个月,各种问题都找遍了,各种代码都优化了,问题还是出现,于是没办法,只能定期重启iis,几十分钟重启一次,但这样会出现session丢失,客户也抱怨,体验不好,老是重新登录。
后来无意间,在优化网站过程中,去掉了viewdata来传值,居然发现网站就不会崩溃了,很纳闷。
这个问题,google,百度也没找到相关的资料,于是自己研究了一下,我猜估计是viewdata,是存在与当前action里的,但我是Aaction直接return了Baction,估计这个return的过程中,两个action都在调用,因为是在A
action里声明创建,而return到B action里,将这个viewdata传递过来后,因为Viewdata只对当前action有效,离开则销毁,但这种情况下,我销毁的是B action,所以导致这个viewdata一直没法销毁,网站就崩溃。
以前看到过有篇文章说,viewdata的数据只需要几k或者几十k就足以导致网站崩溃,或许就是这个原因把。
这个坑,坑了我几个月,希望此文章能献给MVC开发中,跟我范同样错误的朋友借鉴参考。
至于我的猜测,是否准确,还希望大牛来指出。
相关文章推荐
- Android WebView的loadData方法注意事项
- 关于Android WebView的loadData方法的注意事项分析
- Android WebView的loadData方法注意事项
- Android WebView的loadData方法注意事项
- Android WebView的loadData方法注意事项
- Android WebView的loadData方法注意事项
- asp.net mvc两种传值(数据)方式(viewdata/mode)
- Asp.Net MVC之ViewData字典与ViewModel模式
- 【转】Scott_ASP.NET MVC框架(第三部分) 把ViewData从控制器传到视图
- ASP.NET MVC 2.0 in Vs2010 :使用C# 4.0中使用动态类型来传递ViewData
- ASP.NET MVC 入门5、View与ViewData
- ASP.NET MVC 2.0 in Vs2010 :使用C# 4.0中使用动态类型来传递ViewData
- dll #pragma data_seg注意事项
- OpenSessionInViewFilter 配置注意事项
- ASP.NET MVC 入门5、View与ViewData
- Asp.net MVC 示例项目"Suteki.Shop"分析之---ViewData
- ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图
- ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图
- ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图
- iPhone软件开发之UINavigationController 装载/卸载 ViewController 的注意事项