2015-11-25 3 views
10

Может ли частичный просмотр отображаться асинхронно?Как визуализировать частичный вид асинхронно

У меня есть частичный вид, который должен отображать сообщения в блоге. Сообщения в блоге возвращаются асинхронно.

В моем _Layout файле сделаю мой партией footer _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' 

Должен ли я просто создать синхронный mthod для возврата моих данных?

+0

Возможно, это должно быть @ Html.Partial («FooterLatestBlogPosts», «Common»). – buffjape

+0

@buffjape Я тоже пробовал это и получил следующую ошибку. Просто помните, что 'FooterLatestBlogPosts' не находится под общим доступом, но является методом действия и представлением в моем контроллере' Common': 'Частичный вид 'FooterLatestBlogPosts' не найден или механизм просмотра не поддерживает найденные местоположения –

+1

ОК, игнорируйте меня и проверьте другие вопросы, например 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, которое он предложил. –

Смежные вопросы