我希望在发生一次操作(例如点击)后更新我的MVC页面的不同区域。
如何,我使用ajax,并包装需要更新所有这些部分的整个区域是反直觉的,因为发回的ajax数据将接近整个页面。
所以,我有一些局部视图,但问题是,每个动作只返回一个视图!如何从这一个动作返回多个视图?
我知道一个流行的解决方案就是用视图中每个“部分”的多个异步javascript ajax请求来锤击服务器,但这实际上是不必要的和低效的,重建和销毁页面(比如说)只有一次5次动作,当它应该只发生一次,一旦它发生,服务器应该管理当时和那里的所有部分视图。
任何人的想法?我很绝望。
虽然是mvc框架的初学者,但我确信一个优雅的解决方案必须存在,因为我对MVC人员的信任,我们肯定不会为这样的事情服务器DDoS吗?
答案 0 :(得分:2)
一种可能的方法是进行批处理操作,脚本将调用该操作。当将结果包装在JSON对象中时,此操作将在内部调用所有部分视图。在客户端,您的脚本将解包部分视图结果,并将它们放在页面中的适当位置。
但是,这种方法存在一些局限性(以及您通常要做的事情):
坦率地说,如果您要更新页面的多个部分,但是想要批量执行该操作,那么您也可以停止使用Ajax,只需重新加载整个页面。
答案 1 :(得分:0)
您可以在另一个视图中包含部分视图,只需使用HTML.RenderPartial
帮助程序。
答案 2 :(得分:0)
我会说从ajax调用发回html是不好的做法。在我看来,更好的选择是发送回json并使用该数据来创建html客户端。要创建html,您可以使用像jtemplates这样的javascript模板引擎(如果使用jquery)。
如果您愿意,可以从一个动作发送json数据。但这取决于它是什么类型的数据。如果它是非常不同的部分你可能应该拆分它或者根本不使用ajax,因为你正在更新大部分页面。