web-dev-qa-db-fra.com

Devrais-je changer @ Html.Partial en @ Html.PartialAsync comme le suggère Visual Studio?

Dans mon code, j'ai @Html.Partial("_StatusMessage", Model.StatusMessage) mais Visual Studio m'avertit que: Error MVC1000: Use of IHtmlHelper.Partial may result in application deadlocks. Consider using <partial> Tag Helper or IHtmlHelper.PartialAsync.

Devrais-je désactiver cette erreur ou devrais-je vraiment changer @Html.Partial à @Html.PartialAsync, et pourquoi?

21
DiPix

Oui nous devrions, Voir la section ci-dessous de leur site officiel

Migrer à partir d'un assistant HTML

Considérez l'exemple suivant d'assistance HTML asynchrone. Une collection de produits est itérée et affichée. Selon le premier paramètre de la méthode PartialAsync, la vue partielle _ProductPartial.cshtml est chargée. Une instance du modèle Product est transmise à la vue partielle pour la liaison.

CSHTML 
    @foreach (var product in Model.Products)
    {
        @await Html.PartialAsync("_ProductPartial", product)
    }

L'assistant de balise partiel suivant présente le même comportement de rendu asynchrone que l'assistant HTML PartialAsync. L'attribut de modèle se voit attribuer une instance de modèle de produit pour la liaison à la vue partielle.

CSHTML 
@foreach (var product in Model.Products)
{
    <partial name="_ProductPartial" model="product" />
} 

Copié à partir de https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper?view=aspnetcore-2.1

22
MrNams

@niico, en réponse à votre commentaire de

Où l'assistant de balise <partial> S'inscrit-il dans ceci?

D'après ce que j'ai pu trouver, dans la documentation et dans github, il semble que vous soyez censé utiliser @Html.PartialAsync() ou <partial name="_Post" /> à la place. De @Html.Partial(). Cependant, l'élément <partial name="" /> Ne semble pas fonctionner sur ma version de .NET CORE , qui est mise à jour aujourd'hui (23/08/18)

S'il te plait regarde:

https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper?view=aspnetcore-2.1

https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1

https://github.com/IdentityServer/IdentityServer4/pull/2344

5
JhWebDev

En commençant par ASP.NET Core 2.1 ... utilisez @await Html.PartialAsync() au lieu de @Html.Partial()

1
Les P

Je ne connais pas votre code mais je pense que celui-ci devrait répondre à votre question: Quand utiliser @await Html.PartialAsync dans une vue dans MVC 6

Selon la documentation ASP.NET MVC sur les vues partielles. https://docs.asp.net/en/latest/mvc/views/partial.html

The PartialAsync method is available for partial views containing asynchronous code (although code in views is generally discouraged):

Aussi la note sur la page.

If your views need to execute code, the recommended pattern is to use a view component instead of a partial view.

Vous devez donc utiliser Partial et éviter PartialAsync. Si vous vous trouvez avec un PartialAsync, vous devez vous demander si vous faites quelque chose de mal, utilisez plutôt ViewComponent ou déplacez la logique de la vue vers le contrôleur.

1
Timur Zanagar