Должен ли я изменить @ Html.Partial на @ Html.PartialAsync, как рекомендует Visual Studio? - PullRequest
0 голосов
/ 09 июня 2018

В моем коде у меня есть @Html.Partial("_StatusMessage", Model.StatusMessage), но Visual Studio предупреждает меня, что: Error MVC1000: Use of IHtmlHelper.Partial may result in application deadlocks. Consider using <partial> Tag Helper or IHtmlHelper.PartialAsync.

Стоит ли отключить эту ошибку или мне действительно нужно изменить @Html.Partial на @Html.PartialAsync, и почему?

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Да, мы должны, см. Ниже раздел с их официального сайта

Миграция из HTML Helper

Рассмотрим следующий пример асинхронного HTML Helper.Коллекция продуктов повторяется и отображается.В соответствии с первым параметром метода PartialAsync загружается частичное представление _ProductPartial.cshtml.Экземпляр модели Product передается в частичное представление для привязки.

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

Следующий помощник по частичным тегам выполняет то же поведение асинхронного рендеринга, что и помощник по HTML PartialAsync.Атрибуту модели присваивается экземпляр модели продукта для привязки к частичному представлению.

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

Скопировано из https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper?view=aspnetcore-2.1

0 голосов
/ 23 августа 2018

@ niico, в ответ на ваш комментарий

Где в это вписывается хелпер тегов <partial>?

Исходя из того, что я смог найти, из документации и из github, похоже, что вы должны использовать @Html.PartialAsync() или <partial name="_Post" /> вместо @Html.Partial().Однако элемент <partial name="" />, похоже, не работает в моей версии .NET CORE , которая обновлена ​​на сегодняшний день (23.08.18)

Пожалуйста, смотрите:

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

0 голосов
/ 19 сентября 2018

Начиная с ASP.NET Core 2.1 ... используйте @await Html.PartialAsync() вместо @Html.Partial()

0 голосов
/ 09 июня 2018

Я не знаю ваш код, но я думаю, что этот должен ответить на ваш вопрос: Когда использовать @await Html.PartialAsync в представлении в MVC 6

Согласно ASP.NET MVC документация по частичным видам.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):

Также примечание на странице.

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

Так что вам следует использовать Partial и избегать PartialAsync, и если вы обнаружите, что у вас есть PartialAsync, вы должны спросить себя,вы делаете что-то не так, возможно, вам следует вместо этого использовать ViewComponent или переместить логику из представления в контроллер.

...