ASP.NET MVC 2 beta Асинхронное рендеринг - PullRequest
0 голосов
/ 02 декабря 2009

Справочная информация:

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 ]

2 голосов
/ 16 декабря 2009

Я не думаю, что вы можете сделать это успешно. Точка, в которой вы могли бы извлечь выгоду из асинхронной обработки, уже прошла, когда ваши представления начинают отображаться. Конвейер MVC, который устанавливает методы begin / end, уже завершен, и представление не может вернуться к нему по тому же запросу. Похоже, вы застряли с синхронной обработкой ИЛИ изобрели какой-то способ извлечения всех ваших данных заранее и кэширования их в TempData или что-то для рендеринга.

1 голос
/ 11 февраля 2012

Lift Framework в 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 () для длинного опроса.

...