Comment rendre une vue partielle de manière asynchrone
Peut une vue partielle être rendus de manière asynchrone?
J'ai une vue partielle qui doit rendre des billets de blog. Les articles de blog sont retournés de manière asynchrone.
Dans mon _Layout
fichier que j'ai rendu mon pied de page partielle _Footer
. Dans _Footer
j'ai le balisage suivant:
@Html.Action("FooterLatestBlogPosts", "Common")
Donc, à mon Common
contrôleur j'ai le texte suivant de la méthode d'action:
public async Task<ActionResult> FooterLatestBlogPosts()
{
List<ArticleDTO> articleDTOs = await articleTask.GetAllAsync();
return PartialView(articleDTOs);
}
Dans mon FooterLatestBlogPosts
vue partielle j'ai le texte suivant:
@model List<MyProject.Application.DTO.ArticleDTO>
@if (Model.Count > 0)
{
<ul class="list-unstyled">
@foreach (var articleDTO in Model)
{
<li>@articleDTO.Title</li>
}
</ul>
}
J'obtiens une erreur:
Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'
Devrais-je plutôt juste de créer un synchrones mthod de ramener mes données?
source d'informationauteur Brendan Vogt
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez utiliser
Html.Partial
comme suggéré par @buffjape. Si votre vue partielle n'est pas dansShared
dossier, vous devez spécifier le chemin d'accès à la vue@Html.Partial("~/Views/Common/FooterLatestBlogPosts", yourModel)
Mais dans ce cas, votre point de vue est toujours chargé de façon synchrone. Afin de le charger dans async façon, vous avez besoin de le charger via jQuery. Article Améliorer la performance perçue de ASP.NET MVC sites web asynchrone avec vue partielle sur donne une très bonne description sur la manière de l'atteindre.
Également remplacer votre
Html.Render
avecJe suis allé avec la réponse dans le post que @buffjape suggéré:
Async PartialView causes "HttpServerUtility.Exécuter bloqué..." exception
J'ai changé mes méthodes toutes synchrone.