为什么 Blazor 无法路由到剃须刀片库中的组件?



我有一个 Blazor 应用和一个 Razor 库。

在我的 Razor 库中,我有一个组件,AccountNavigation.razor我能够将其与 html 语法一起使用并且它工作正常,如下所示:<AccountNavigation />

问题出在另一个组件上,Login.razor在同一个库中,@page "/login"写在它的顶部。没有链接适用于href="/login",或者即使我手动尝试路由也不起作用。如果我Login.razor移动到 Blazor 应用项目,它将起作用。

我的剃刀库项目如下:

<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>1.0.3.5</Version>
<LangVersion>8.0</LangVersion>
<RazorLangVersion>3.0</RazorLangVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.RazorPages" Version="2.2.5" />
</ItemGroup>
</Project>

我也尝试过针对网络核心 3.0 和同样的问题。我的 Razor 库中只有 3 个文件。工作AccountNavigation.razorLogin.razor_Imports.razor。我缺少什么吗?

感谢 CoolBots 向我指出有关 Blazor 路由的文档,我需要这个关键部分:

使用附加程序集参数指定其他 搜索时要考虑的路由器组件的程序集 可路由组件。此外,还考虑指定的程序集 到应用程序程序集指定的程序集。在以下示例中, 组件 1 是在引用的类中定义的可路由组件 图书馆。以下附加程序集示例导致路由 支持组件 1:

<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...

不确定何时或为什么开始发生这种情况。但就我而言,每次我添加或重命名 razor 组件时,它都会在 csproj 文件中向该组件添加一个<remove>项。只需将其删除即可。

使用 asp.net 核心 3.1 和 blazor 3.2 预览版 2

@maksymiuk在这一点上是绝对正确的。更改Core 3.1中App.Razor文件中的路由器标记,并包含外部路由。

<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...

有趣的是,一旦您从 Razor 库中包含 1 个组件,您会发现其他组件(至少在相同的区域/页面文件夹中(中的所有其他路由也可以工作。

最新更新