ASP.NET MVC 2 beta异步RenderAction

时间:2009-12-02 13:40:56

标签: model-view-controller asynchronous renderaction

背景

http://www.hanselman.com/blog/HanselminutesPodcast188ASPNETMVC2BetaWithPhilHaack.aspx

从27:15开始,RenderAction在28:43被讨论过RenderAction不会成为Asynchronocity的一部分,因为它被称为异步动作方法。

(假设您的家庭门户网站索引操作调用1.GetNews 2.GetWeather 3.GetStock异步。您有一个RenderAction在同一视图上显示用户最近的帖子。(GetUserRecentPosts))

问题

如果RenderActions本身是异步的,该怎么办?

只有在主索引完成其操作后才会调用GetUserRecentPosts吗?

默认情况下,RenderActions是否应在视图上异步渲染?

2 个答案:

答案 0 :(得分:2)

我认为你不能成功地做到这一点。当您的视图开始渲染时,您可以从asynch处理中获益。设置开始/结束方法的MVC管道已经完成,并且View无法在同一请求中返回到它。好像你可能会遇到同步处理或者设计一些方法来预先检索所有数据并将其缓存在TempData中或用于渲染。

答案 1 :(得分:1)

Scala中的提升框架可能是我所知道的唯一具有并行部分动作的框架,它不会阻止主内容的呈现,但会使用Comet-push为那些可能需要的块提供部分视图内容同时获取数据。

使用它,只需将视图中的块包装在并行节点

<lift:parallel>
     //this is where Html.RenderAction("GottaFetchNetworkDataFromSomewhereView");
    //this is where Html.RenderAction("GottaFetchNetworkDataFromSomewhereView2");
  // would go
</lift:parallel>

Lift还会处理页面的连接不足,以适当的方式管理http请求,以便浏览器推送不会“等待”回合。

不幸的是,ASP.NET MVC的Comet支持很差。异步控制器之外没有多少,这是一种改进但不像Akka用于长轮询的框架suspend()方法那样优雅。