为什么此 Blazor 应用程序中的组件无法呈现?
Why would components in this Blazor app fail to render?
我正在编写一个 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。
您可能 运行 遇到了 .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
原来根本原因与命名空间和大小写有关。
最初设置项目时,我是使用 VS Code 中的命令行创建的。出于习惯,我把所有的东西都写成小写的(即dotnet new blazor -o myapp
)。
作为个人喜好,我喜欢我的名称空间是标题大小写的,所以一段时间后我决定 "tidy up" 并将 myapp
更改为 Myapp
。我检查了代码以重构为新的 titlecase 名称并编译了所有内容,所以我继续工作......直到几周后我回去对组件进行一些工作并注意到它没有表现。
事实证明,razor 页面会根据文件夹自动命名空间,其中的一个子集包含在 _ViewImports.cshtml 页面中。该文件仍然引用小写命名空间,查找小写项目根目录的页面不再能够找到正确的共享组件。
所以不出所料,这完全是一个 self-inflicted 问题,是的,我觉得很傻,因为没有从一开始就考虑清楚。
我正在编写一个 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。
您可能 运行 遇到了 .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
原来根本原因与命名空间和大小写有关。
最初设置项目时,我是使用 VS Code 中的命令行创建的。出于习惯,我把所有的东西都写成小写的(即dotnet new blazor -o myapp
)。
作为个人喜好,我喜欢我的名称空间是标题大小写的,所以一段时间后我决定 "tidy up" 并将 myapp
更改为 Myapp
。我检查了代码以重构为新的 titlecase 名称并编译了所有内容,所以我继续工作......直到几周后我回去对组件进行一些工作并注意到它没有表现。
事实证明,razor 页面会根据文件夹自动命名空间,其中的一个子集包含在 _ViewImports.cshtml 页面中。该文件仍然引用小写命名空间,查找小写项目根目录的页面不再能够找到正确的共享组件。
所以不出所料,这完全是一个 self-inflicted 问题,是的,我觉得很傻,因为没有从一开始就考虑清楚。