我的问题是这样的:
当前[控制器C]的一个方法[ActionA] 从数据库中通过特定条件查询并排序 得到的结果填充进[视图模型ViewModelA] 并在[视图ViewA]中显示 形式比如是列表页
然后我想让上面这个[视图模型ViewModelA]用另外一种方式展示 比如UI界面变化 部分字段不显示等等
也就是把它当做参数送到[控制器C]的另外一个[ActionB] 在[ViewB]上显示 该怎么传?
网上搜索到的有2种办法 一个是向ActionB传数据库操作参数,再次取数,可数据已经取过了 再做一遍岂不是大大的浪费?
还有是把ViewModel对象数据保存到ViewBag里 再在ActionB里赋值给新的ViewModel 可为什么不能直接传ViewModel对象过去呢?
这你就要去微软当初是怎么设计的?为什么不能直接传ViewModel对象过去呢?
【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。
可以传ViewModel对象啊
如果说改变现实的形式是通过不同的页面来实现的其实是多次请求服务器了,查不查询的其实问题不大,可以利用缓存,请求的还是同一个action不过传递一个类型的参数进去,然后return 局部视图返回不同的partialview("viewname",model);
个人还是觉得这块是通过前台来实现的,或者起码也是一个ajax将当前显示形式的类型传递到后台或者存入到某个位置来记录显示的状态不至于刷新后又回到了第一种显示形式;
数据没有变化用缓存