VB.NET ASP.NET Core Razor视图调用PartialAsync报BC37058错误
问题原因
错误 BC37058 的核心触发原因是:VB.NET Razor 引擎和 C# Razor 的行为存在差异,不会自动为包含顶层 @await 表达式的视图生成带 Async 修饰符的执行方法,当视图中分散存在多个 await 调用、基类配置错误、路径解析异常时,就会抛出该编译错误。
你当前代码里还存在路径不一致的隐患:部分分部视图指向 ~/Views/Shared/ 文件夹,部分指向 ~/Views/_Shared/ 文件夹,路径匹配失败也会加剧编译识别异常。
解决方法
按优先级依次尝试,绝大多数场景下第一种方案即可直接解决问题:
- 使用官方推荐的
<partial>标签助手替代手写Html.PartialAsync调用,完全绕开VB Razor对await的识别bug,不需要修改任何项目配置,写法如下:
注意先统一所有分部视图的实际路径,不要混用<!-- 替换原来的@await Html.PartialAsync写法 --> <partial name="~/Views/Shared/_title_meta.vbhtml" /> @RenderSection("styles", False) <partial name="~/Views/Shared/_head_css.vbhtml" /> <!-- Begin page --> <div id="layout-wrapper"> <partial name="~/Views/Shared/_topbar.vbhtml" /> <partial name="~/Views/Shared/_sidebar.vbhtml" /> <div class="main-content"> <div class="page-content"> <div class="container-fluid"> <partial name="~/Views/Shared/_page_title.vbhtml" /> @RenderBody() </div> </div> <partial name="~/Views/Shared/_footer.vbhtml" /> </div> </div> @RenderSection("externalhtml", False) <partial name="~/Views/Shared/_right_sidebar.vbhtml" /> @RenderSection("scripts", false)Shared和_Shared文件夹命名。 - 如果坚持使用
Html.PartialAsync写法,先确认项目根目录的_ViewImports.vbhtml文件存在且配置正确,没有该文件就手动新建,填入以下配置:@Imports Microsoft.AspNetCore.Mvc.Razor @inherits RazorPage(Of TModel) @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers - 若仍存在编译错误,可直接改用同步渲染方法
@Html.Partial(),去掉await和方法名的Async后缀即可,常规业务场景下同步渲染分部视图不会出现可感知的性能问题:@Html.Partial("~/Views/Shared/_topbar.vbhtml") - 检查项目
.vbproj文件的Razor编译配置,确认存在以下配置项(.NET 6+版本适用),缺失则补上:<PropertyGroup> <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish> <UseRazorSourceGenerator>true</UseRazorSourceGenerator> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="匹配你的项目.NET版本号" /> </ItemGroup>
内容的提问来源于stack exchange,提问作者Terence
相关产品推荐
相关产品推荐

