我应该像Visual Studio建议的那样将@ Html.Partial更改为@ Html.PartialAsync吗?

DiP*_*Pix 23 c# razor .net-core

在我的代码我有,@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,为什么?

MrN*_*ams 24

是的,我们应该从他们的官方网站上看到以下部分

从HTML帮助程序迁移

请考虑以下异步HTML Helper示例.迭代并显示产品集合.根据PartialAsync方法的第一个参数,加载_ProductPartial.cshtml局部视图.Product模型的实例将传递到部分视图以进行绑定.

CSHTML 
    @foreach (var product in Model.Products)
    {
        @await Html.PartialAsync("_ProductPartial", product)
    }
Run Code Online (Sandbox Code Playgroud)

以下部分标记帮助程序实现了与PartialAsync HTML Helper相同的异步呈现行为.为model属性分配了一个Product模型实例,用于绑定到局部视图.

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

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


JhW*_*Dev 6

@niico,回应您的评论

<partial>标签助手在哪里适合?

根据我能够从文档和github中找到的内容,您似乎应该使用@Html.PartialAsync()<partial name="_Post" /> Inplace Of @Html.Partial()。但是,该<partial name="" />元素似乎在我的.NET CORE版本上不起作用,该版本截至今天(8/23/18)

请参见:

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper?view=aspnetcore-2.1

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/partial?view=aspnetcore-2.1

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

  • 我有一个相同的问题,就是&lt;partial&gt;不能正常工作,直到我发现[此评论](https://github.com/aspnet/Docs/issues/6920#issuecomment-396394470)标签帮助程序必须在Views / _ViewImports.cshtml文件中注册:`@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers` (4认同)

Les*_*s P 6

从 ASP.NET Core 2.1 开始......使用@await Html.PartialAsync()而不是 @Html.Partial()

  • 问题询问是否应该使用 PartialAsync,如果应该,为什么。只是说使用 Html.PartialAsync 而不是 Html.Partial() 没有帮助 (8认同)

Tim*_*gar 1

我不知道你的代码,但我认为这个应该回答你的问题: When to use @await Html.PartialAsync in a View in 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):
Run Code Online (Sandbox Code Playgroud)

还有页面上的注释。

If your views need to execute code, the recommended pattern is to use a view component instead of a partial view.
Run Code Online (Sandbox Code Playgroud)

因此,您应该使用 Partial 并避免 PartialAsync,如果您发现自己使用 PartialAsync,您应该问问自己是否做错了什么,也许您应该使用 ViewComponent 来代替,或者将逻辑从视图移动到控制器。