【问题标题】:Why wont Blazor route to component in razor library?为什么 Blazor 不会路由到剃刀库中的组件?
【发布时间】:2020-01-28 19:46:11
【问题描述】:

我有一个 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.razorLogin.razor_Imports.razor。有什么我遗漏的吗?

【问题讨论】:

  • 你能描述一下当它不起作用时会发生什么吗?有什么错误?另外,如果我将另一个组件添加到同一个 Razor 库 (Test.razor),该组件是否有效?
  • 如果 Razor 库是从 ASP.NET MVC 项目中引用的,我认为这个组件可以正常工作,对吧?
  • @CoolBots 没有错误,我希望有这样我可以诊断某些东西,但它会转到未找到的视图,默认情况下只显示 Sorry, there's nothing at this address. 是的,该库被正确引用,并且当我将 Razor 库中的另一个组件用作原始问题中所述的视图组件时,它可以工作。只有当我尝试将组件用作页面并尝试路由到它们时才会出现问题。
  • 那么应该可以工作.. 以防万一,请根据文档仔细检查您的设置:docs.microsoft.com/en-us/aspnet/core/blazor/…

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


【解决方案1】:

感谢 CoolBots 将我指向 Blazor Routing 上的文档,我需要这个关键部分:

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

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

【讨论】:

    【解决方案2】:

    不确定何时或为何开始发生这种情况。但就我而言,每次我添加或重命名剃须刀组件时,它都会在 csproj 文件中的该组件中添加一个 &lt;remove&gt;item。只需将其删除。

    使用 asp.net core 3.1 和 blazor 3.2 preview 2

    【讨论】:

    • 太疯狂了,这是我的问题.. 花了 3 个小时想知道为什么只有一个 .razor 页面有效.. 任何新页面都是空白的!没有错误,没有什么!一定要喜欢使用新的东西
    • 但是为什么微软为什么?
    【解决方案3】:

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

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

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

    【讨论】:

    • “有趣的是,只要你从 Razor 库中包含 1 个组件,你就会在其他组件中找到所有其他路由”这是因为你没有包含该组件。您将要添加的程序集添加到程序集列表中,这些程序集将被“扫描”以查找用页面路由属性修饰的类。
    • 是的。对我来说,感觉应该有更好的方法来获取程序集,而不是获取某个类所属的程序集。如果我将该类重构为另一个程序集,我的一半路由将失败。
    猜你喜欢
    • 2021-02-16
    • 2020-05-10
    • 2020-02-19
    • 2020-02-01
    • 1970-01-01
    • 2020-07-09
    • 2020-08-11
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多