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

时间:2018-06-09 13:19:18

标签: 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,为什么?

5 个答案:

答案 0 :(得分:17)

是的,我们应该, 请参见其官方网站的以下部分

从HTML帮助器迁移

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

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

以下Partial Tag Helper实现了与PartialAsync HTML Helper相同的异步呈现行为。为模型属性分配了一个产品模型实例,用于绑定到局部视图。

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

答案 1 :(得分:4)

@niico,回应您对

的评论
  

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

根据我从文档和github中可以找到的信息,看来您应该使用@Html.PartialAsync()<partial name="_Post" /> 代替 { {1}}。但是@Html.Partial()元素似乎不适用于我的.NET CORE 版本,该版本已于今天(8/23/18)

更新

请参阅:

https://firebase.google.com/docs/cloud-messaging/concept-options

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

答案 2 :(得分: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):

也是页面上的注释。

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,或者将逻辑从视图移动到控制器

答案 3 :(得分:0)

您可以在MVC项目中尝试使用此方法来“警告MVC1000使用IHtmlHelper.Partial”。

igraph's documentation

<partial name="~/Views/Folder/_PartialName.cshtml" />
<partial name="/Views/Folder/_PartialName.cshtml" />

答案 4 :(得分:-1)

从ASP.NET Core 2.1开始...使用@await Html.PartialAsync()代替@Html.Partial()