首页新闻找找看学习计划

ASP.NET MVC 如何向当前控制器的另一个Action 传送当前视图模型对象的数据?

0
[待解决问题]

我的问题是这样的:
当前[控制器C]的一个方法[ActionA] 从数据库中通过特定条件查询并排序 得到的结果填充进[视图模型ViewModelA] 并在[视图ViewA]中显示 形式比如是列表页
然后我想让上面这个[视图模型ViewModelA]用另外一种方式展示 比如UI界面变化 部分字段不显示等等
也就是把它当做参数送到[控制器C]的另外一个[ActionB] 在[ViewB]上显示 该怎么传?

网上搜索到的有2种办法 一个是向ActionB传数据库操作参数,再次取数,可数据已经取过了 再做一遍岂不是大大的浪费?
还有是把ViewModel对象数据保存到ViewBag里 再在ActionB里赋值给新的ViewModel 可为什么不能直接传ViewModel对象过去呢?

hulu的主页 hulu | 菜鸟二级 | 园豆:202
提问于:2017-10-24 22:00
< >
分享
所有回答(5)
0

这你就要去微软当初是怎么设计的?为什么不能直接传ViewModel对象过去呢?

~扎克伯格 | 园豆:1797 (小虾三级) | 2017-10-24 23:29
0

【ViewModel对象数据保存到ViewBag里,再在ActionB里赋值给新ViewModel,为什么不能直接传ViewModel对象过去呢?】

ASP.NET MVC Controller 每次调用Action都是重新加载整个Controller,具体原理请自行查阅;

ViewBag是当前ActionResult的视图包,所以不能共享;

【把ViewModel当做参数送到[控制器C]的[ActionB] 在[ViewB]上显示 该怎么传?】

常用方法:

可以通过JavaScript将ActionA的ViewModel序列化成相应的数据格式(比如json,xml)作为参数传递到Controller C的ActionB,然后Controller C的ActionB接收该参数, 并反序列化为ViewModel。

AioDiage | 园豆:25 (初学一级) | 2017-10-25 12:34
0

可以传ViewModel对象啊

上海地铁 | 园豆:202 (菜鸟二级) | 2017-12-27 22:40
1

如果说改变现实的形式是通过不同的页面来实现的其实是多次请求服务器了,查不查询的其实问题不大,可以利用缓存,请求的还是同一个action不过传递一个类型的参数进去,然后return 局部视图返回不同的partialview("viewname",model); 

个人还是觉得这块是通过前台来实现的,或者起码也是一个ajax将当前显示形式的类型传递到后台或者存入到某个位置来记录显示的状态不至于刷新后又回到了第一种显示形式;

隔壁老黎 | 园豆:199 (初学一级) | 2018-01-03 14:08
0

数据没有变化用缓存

top12 | 园豆:219 (菜鸟二级) | 2018-07-24 18:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册