我正在写一个Blazor应用程序,显然我想要在那里渲染一些组件。我刚刚尝试在我的主布局中添加一个基本的导航元素,但它没有渲染。我可以看到DOM上的元素,但该元素是空的。
我在NavMenu组件中开始使用一些相当简单的内容,我试图将其包含在MainLayout.cshtml中:
<h1>WHYYYY????</h1>
我在MainLayout.cshtml页面上也采用了一个非常简单的布局:
@inherits BlazorLayoutComponent
<NavMenu />
<div class="body-content">
@Body
</div>
我项目中的文件结构似乎并不复杂:
所以我在这里不知道我忽略了什么。看起来Blazor 知道它应该呈现给页面的东西 - 这就是我可以在DOM中看到NavMenu元素的原因。但是在该元素内部从未呈现过任何内容。少了什么东西?
我正在运行最新的(在撰写本文时)Blazor版本:0.5.1。
事实证明,根本原因与命名空间和套管有关。
当我最初设置项目时,我使用VS Code中的命令行创建它。出于习惯,我用小dotnet new blazor -o myapp
了一切(即dotnet new blazor -o myapp
)。
作为个人喜好,我喜欢我的名称空间是标题,所以一段时间后我决定“整理”并将myapp
更改为Myapp
。我通过代码重构了新的标题名称和编译的所有内容,所以我继续工作......直到几周后我回去做一个组件的工作,发现它没有表现。
事实证明,剃刀页面会根据文件夹自动命名,其中一部分包含在_ViewImports.cshtml页面中。该文件仍引用小写命名空间,而寻找小写项目根的页面不再能够找到正确的共享组件。
所以,毫无疑问,这是一个完全自我造成的问题,是的,我觉得从一开始就没有正确地思考它是非常愚蠢的。
您可能遇到了.csproj文件的错误。它应该如下所示:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RunCommand>dotnet</RunCommand>
<RunArguments>blazor serve</RunArguments>
<LangVersion>7.3</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Blazor.Browser" Version="0.5.1" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="0.5.1" />
<DotNetCliToolReference Include="Microsoft.AspNetCore.Blazor.Cli" Version="0.5.1" />
</ItemGroup>
你的内容很可能是额外的东西,这会阻止组件的编译。这通常在添加文件或复制文件时发生。请参阅: https : //github.com/aspnet/Blazor/issues/1206