不在共享项目中的页面无法在浏览器中正确显示

问题描述 投票:0回答:1

我正在尝试使用 Visual Studio 中的“.net Maui Blazor 和 Web App”模板在 .net 9 和 Blazor 中创建一个项目。

我已经创建了项目,并成功运行了它,我可以看到该项目作为Windows App运行,或者将启动项目设置为Web项目,然后在浏览器中运行它。

到目前为止一切都很好。

现在我向 Web 项目添加一个名为“Test”的测试页面。 我把它放在 Web 项目中,因为我不希望它与 Maui 项目共享。 然后我再次运行该项目,并输入测试页的地址。 “测试”页面正确显示 1 秒,然后消失并显示“未找到”消息。

如果我将测试页添加到共享目录,它会正常显示。

我一直无法解决这个问题。 我在这里创建了一个测试仓库:https://github.com/gregoryagu/MauiApp5

我需要做什么才能让测试页面正常显示?

c# blazor blazor-server-side visual-studio-2022 maui-blazor
1个回答
0
投票

首先,为什么它不起作用。这里的链条是:

  • Web/Program.cs 中,根目录是

    app.MapRazorComponents<App>()

  • Web/Components.App.razor使用

    <Routes @rendermode="InteractiveServer" />

  • 共享/Routes.razor

    <Router AppAssembly="typeof(Layout.MainLayout).Assembly" >

因此,路由器会扫描包含 MainLayout 的程序集中的页面。您需要的(但不会立即起作用)是

<Router AppAssembly="typeof(Layout.MainLayout).Assembly" 
      AdditionalAssemblies="typeof(Pages.Test)">    

由于您无法拥有从共享到 Web 程序集的循环依赖关系,因此您将需要一个单独的路由器。

  • Routes.razor
    复制到 Web/组件。将其重命名为 RoutesWeb.razor .
  • AdditionalAssemblies="[typeof(Pages.Test).Assembly]"
    添加到第一行。
  • 还将共享添加到
    DefaultLayout="typeof(Shared.Layout.MainLayout)"
  • 在 App.razor 中,将 Routes 元素更改为
    <RoutesWeb @rendermode="InteractiveServer" />
© www.soinside.com 2019 - 2024. All rights reserved.