为什么Blazor不会路由到剃刀库中的组件?

时间:2019-09-29 04:26:25

标签: c# razor blazor blazor-server-side .net-core-3.0

我有一个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>

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

感谢CoolBots向我介绍Blazor Routing上的文档,我需要这一关键部分:

  

使用AdditionalAssemblies参数指定其他   搜索时要考虑的路由器组件的程序集   可路由的组件。另外考虑指定的组件   到AppAssembly指定的程序集。在以下示例中,   Component1是在引用的类中定义的可路由组件   图书馆。下面的AdditionalAssemblies示例导致路由   对Component1的支持:

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

答案 2 :(得分:1)

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

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

但是,有趣的是,只要在Razor库中包含1个组件,您就会发现其他组件中的所有其他路由(至少在同一Areas / Pages文件夹中)也将起作用。