为什么 Blazor 不会路由到剃刀库中的组件?
Why wont Blazor route to component in razor library?
我有一个 Blazor 应用程序和一个 Razor 库。
在我的 Razor 库中,我有一个组件 AccountNavigation.razor
,我可以使用 html 语法并且它可以正常工作,如下所示:<AccountNavigation />
问题出在另一个组件上,Login.razor
在同一个库中,@page "/login"
写在它的顶部。没有指向 href="/login"
的链接,或者即使我手动尝试路线也不起作用。如果我将 Login.razor
移动到 Blazor 应用程序项目,它就会工作。
我的Razor库项目如下:
<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>
我也试过针对 net core 3.0 和同样的问题。我的 Razor 库中只有 3 个文件。工作 AccountNavigation.razor
、Login.razor
和 _Imports.razor
。有什么我想念的吗?
感谢 CoolBots 将我指向 Blazor Routing 上的文档,我需要这个关键部分:
Use the AdditionalAssemblies parameter to specify additional
assemblies for the Router component to consider when searching for
routable components. Specified assemblies are considered in addition
to the AppAssembly-specified assembly. In the following example,
Component1 is a routable component defined in a referenced class
library. The following AdditionalAssemblies example results in routing
support for Component1:
<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
不确定这种情况何时或为何开始发生。但就我而言,每次添加或重命名剃须刀组件时,它都会向 csproj 文件中的该组件添加一个 <remove>
item。删除它即可。
使用 asp.net 核心 3.1 和 blazor 3.2 预览版 2
@maksymiuk 在这一点上完全正确。在 Core 3.1 中更改 App.Razor 文件中的 Router 标记,并包含外部路由。
<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
有趣的是,一旦您从 Razor 库中包含 1 个组件,您就会发现其他组件中的所有其他路由(至少在同一个 Areas/Pages 文件夹中)也将起作用。
我有一个 Blazor 应用程序和一个 Razor 库。
在我的 Razor 库中,我有一个组件 AccountNavigation.razor
,我可以使用 html 语法并且它可以正常工作,如下所示:<AccountNavigation />
问题出在另一个组件上,Login.razor
在同一个库中,@page "/login"
写在它的顶部。没有指向 href="/login"
的链接,或者即使我手动尝试路线也不起作用。如果我将 Login.razor
移动到 Blazor 应用程序项目,它就会工作。
我的Razor库项目如下:
<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>
我也试过针对 net core 3.0 和同样的问题。我的 Razor 库中只有 3 个文件。工作 AccountNavigation.razor
、Login.razor
和 _Imports.razor
。有什么我想念的吗?
感谢 CoolBots 将我指向 Blazor Routing 上的文档,我需要这个关键部分:
Use the AdditionalAssemblies parameter to specify additional assemblies for the Router component to consider when searching for routable components. Specified assemblies are considered in addition to the AppAssembly-specified assembly. In the following example, Component1 is a routable component defined in a referenced class library. The following AdditionalAssemblies example results in routing support for Component1:
<Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
不确定这种情况何时或为何开始发生。但就我而言,每次添加或重命名剃须刀组件时,它都会向 csproj 文件中的该组件添加一个 <remove>
item。删除它即可。
使用 asp.net 核心 3.1 和 blazor 3.2 预览版 2
@maksymiuk 在这一点上完全正确。在 Core 3.1 中更改 App.Razor 文件中的 Router 标记,并包含外部路由。
<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
有趣的是,一旦您从 Razor 库中包含 1 个组件,您就会发现其他组件中的所有其他路由(至少在同一个 Areas/Pages 文件夹中)也将起作用。