为什么Blazor应用程序中的组件无法呈现?

asp.net-core blazor

我正在写一个Blazor应用程序,显然我想要在那里渲染一些组件。我刚刚尝试在我的主布局中添加一个基本的导航元素,但它没有渲染。我可以看到DOM上的元素,但该元素是空的。

我在NavMenu组件中开始使用一些相当简单的内容,我试图将其包含在MainLayout.cshtml中:

<h1>WHYYYY????</h1>

我在MainLayout.cshtml页面上也采用了一个非常简单的布局:

@inherits BlazorLayoutComponent


<NavMenu />

<div class="body-content">
    @Body
</div>

我项目中的文件结构似乎并不复杂:

在此处输入图像描述

所以我在这里不知道我忽略了什么。看起来Blazor 知道它应该呈现给页面的东西 - 这就是我可以在DOM中看到NavMenu元素的原因。但是在该元素内部从未呈现过任何内容。少了什么东西?

NavMenu Blazor组件

我正在运行最新的(在撰写本文时)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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow