Une vue partielle peut-elle être rendue de manière asynchrone?
J'ai une vue partielle qui doit rendre les articles de blog. Les articles de blog sont renvoyés de manière asynchrone.
Dans mon _Layout
fichier je rend mon pied de page partiel _Footer
. Dans _Footer
J'ai le balisage suivant:
@Html.Action("FooterLatestBlogPosts", "Common")
Donc, dans mon contrôleur Common
, j'ai la méthode d'action suivante:
public async Task<ActionResult> FooterLatestBlogPosts()
{
List<ArticleDTO> articleDTOs = await articleTask.GetAllAsync();
return PartialView(articleDTOs);
}
Dans ma FooterLatestBlogPosts
vue partielle, j'ai les éléments suivants:
@model List<MyProject.Application.DTO.ArticleDTO>
@if (Model.Count > 0)
{
<ul class="list-unstyled">
@foreach (var articleDTO in Model)
{
<li>@articleDTO.Title</li>
}
</ul>
}
Je reçois une erreur:
Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'
Dois-je plutôt simplement créer un mthod synchrone pour récupérer mes données?
Je suis allé avec la réponse dans le post que @buffjape a suggéré:
Async PartialView provoque l'exception "HttpServerUtility.Execute bloquée ..."
J'ai changé toutes mes méthodes en synchrones.
Tout d'abord, vous devez utiliser Html.Partial
Comme suggéré par @buffjape. Si votre vue partielle n'est pas dans le dossier Shared
, vous devez spécifier le chemin d'accès à la vue
@Html.Partial("~/Views/Common/FooterLatestBlogPosts", yourModel)
Cependant, dans ce cas, votre vue est toujours chargée de manière synchrone. Pour le charger de manière asynchrone, vous devez le charger via jQuery. Article Améliorez les performances perçues des sites Web ASP.NET MVC avec des vues partielles asynchrones donne une très bonne description de la façon d'y parvenir.
Remplacez également votre Html.Render
Par
$(document).ready(function(){
$("#yourContainer").load('@Url.Action("FooterLatestBlogPosts", "Common")')
});