如何异步呈现局部视图

Bre*_*ogt 22 c# asp.net asp.net-mvc razor asp.net-mvc-4

部分视图可以异步渲染吗?

我有部分视图需要呈现博客帖子.博客文章以异步方式返回.

在我的_Layout文件中,我渲染了我的部分页脚_Footer.在_Footer我有以下标记:

@Html.Action("FooterLatestBlogPosts", "Common")
Run Code Online (Sandbox Code Playgroud)

所以在我的Common控制器中我有以下操作方法:

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

     return PartialView(articleDTOs);
}
Run Code Online (Sandbox Code Playgroud)

在我的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>
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'
Run Code Online (Sandbox Code Playgroud)

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

And*_*iuc 35

首先,您需要Html.Partial按照@buffjape的建议使用.如果部分视图不在Shared文件夹中,则需要指定视图的路径

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

但是在这种情况下,您的视图仍然是同步加载的.要以异步方式加载它,您需要通过jQuery加载它.文章使用异步部分视图提高ASP.NET MVC网站的感知性能,可以很好地描述如何实现它.

也替换你Html.Render

$(document).ready(function(){
     $("#yourContainer").load('@Url.Action("FooterLatestBlogPosts", "Common")')
});
Run Code Online (Sandbox Code Playgroud)


Bre*_*ogt 7

我在@buffjape建议的帖子中回答了答案:

Async PartialView导致"HttpServerUtility.Execute被阻止..."异常

我将我的方法全部改为同步.


归档时间:

查看次数:

44486 次

最近记录:

6 年,7 月 前