web-dev-qa-db-ja.com

Visual Studioが示唆するように、@ Html.Partialを@ Html.PartialAsyncに変更する必要がありますか?

私のコードには@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に実際に変更する必要がありますか?

21
DiPix

はい、すべきです。公式サイトの以下のセクションをご覧ください

HTMLヘルパーから移行する

次の非同期HTMLヘルパーの例を考えてみましょう。製品のコレクションが繰り返されて表示されます。 PartialAsyncメソッドの最初のパラメーターごとに、_ProductPartial.cshtml部分ビューがロードされます。 Productモデルのインスタンスは、バインドのために部分ビューに渡されます。

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

次の部分タグヘルパーは、PartialAsync HTMLヘルパーと同じ非同期レンダリング動作を実現します。モデル属性には、部分ビューにバインドするための製品モデルインスタンスが割り当てられます。

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 からコピー

22
MrNams

@niico、のあなたのコメントに応えて

<partial>タグヘルパーはどこにこれに適合しますか?

私が見つけたものに基づいて、ドキュメントとgithubから、@Html.PartialAsync()または<partial name="_Post" />In Place Of@Html.Partial()を使用することになっているようです。ただし、<partial name="" />要素は、今日(8/23/18)から更新されている.NET COREのバージョンでは機能しないようです

見てください:

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

ASP.NET Core 2.1以降... @await Html.PartialAsync()の代わりに@Html.Partial()を使用

1
Les P

私はあなたのコードを知りませんが、これはあなたの質問に答えるべきだと思います: MVC 6のビューで@await Html.PartialAsyncを使用する場合

部分ビューに関する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を使用するか、ロジックをビューからコントローラーに移動する必要があります。

1
Timur Zanagar