Подтвердить что ты не робот

Async PartialView вызывает исключение "HttpServerUtility.Execute blocked..."

У меня есть частичный вид, который пытается извлечь IEnumerable<Post> из базы данных с помощью async...

Метод

public static class PostService
{
    public static int PostsPerPage = 50;

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
    {
        return await entityFrameworkDbContext.Posts
            .ToListAsync();
    }
}

PartialView

public async Task<ActionResult> Recent(int page = 0)
{
    return PartialView(await PostService.GetRecentAsync(page));
}

И если я попытаюсь назвать его

@Html.Action("Recent", "Post")

Я получаю следующее исключение

HttpServerUtility.Execute заблокирован, ожидая завершения асинхронной операции.

Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.InvalidOperationException: HttpServerUtility.Execute заблокировано, ожидая завершения асинхронной операции.

Почему я получаю эту ошибку? Не должно ли это работать?

4b9b3361

Ответ 1

Действия ребенка должны выполняться синхронно. Проблема 601 Я также не знаю недавних обновлений текущих библиотек MVC, разрешающих эту функциональность.

Комментарий к выпуску 601, намекает на добавление этой функциональности в MVC vNext, ака. MVC6. Действия с дочерними элементами выглядят заменяемыми на ViewComponent, которые можно асинхронно вызывать из представления, как показано ниже. Полный примеры здесь и здесь

<div>
@await Component.InvokeAsync("YourComponent")
</div>

Подробнее о MVC6, http://www.asp.net/vnext/overview/aspnet-vnext/overview

Примечание. Этот ответ является просто формальностью, поэтому вопрос может быть отмечен как ответ