2015-11-25 258 views
10

异步渲染局部视图?如何异步渲染局部视图

我有一个需要呈现博客文章的局部视图。博客帖子是异步返回的。

在我_Layout文件我呈现我的部分页脚_Footer。在_Footer我有以下的标记:

@Html.Action("FooterLatestBlogPosts", "Common") 
Common控制器

所以我有以下操作方法:

public async Task<ActionResult> FooterLatestBlogPosts() 
{ 
    List<ArticleDTO> articleDTOs = await articleTask.GetAllAsync(); 

    return PartialView(articleDTOs); 
} 

在我FooterLatestBlogPosts局部视图我有以下几点:

@model List<MyProject.Application.DTO.ArticleDTO> 
@if (Model.Count > 0) 
{ 
    <ul class="list-unstyled"> 
      @foreach (var articleDTO in Model) 
      { 
       <li>@articleDTO.Title</li> 
      } 
    </ul> 
} 

我发现了一个错误:

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper' 

我应该创建一个同步方法来恢复我的数据吗?

+0

也许这应该是@ Html.Partial( “FooterLatestBlogPosts”, “通用”)来代替。 – buffjape

+0

@buffjape我试过了,并得到以下错误。只要记住,'FooterLatestBlogPosts'不是下共享,但在我的'Common'控制器的操作方法和观点:'局部视图“FooterLatestBlogPosts”没有被发现或没有视图引擎支持搜索locations' –

+1

OK,不理我和检查其他问题,例如http://stackoverflow.com/questions/24072720/async-partialview-causes-httpserverutility-execute-blocked-exception – buffjape

回答

16

首先你需要使用Html.Partial由@buffjape的建议的。如果你的局部视图不Shared文件夹,你需要指定视图

@Html.Partial("~/Views/Common/FooterLatestBlogPosts", yourModel)

的路径然而,在这种情况下,您的观点是仍然加载同步。要以异步方式加载它,您需要通过jQuery加载它。文章Improve perceived performance of ASP.NET MVC websites with asynchronous partial views对如何实现它给出了很好的描述。

而且取代你Html.Render

$(document).ready(function(){ 
    $("#yourContainer").load('@Url.Action("FooterLatestBlogPosts", "Common")') 
}); 
+0

我与@buffjape后,他建议。 –