防止 Blazor Router 使用 @page 指令找到某些组件

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

在 blazor 服务器端,我有一个 Razor 类库,其中包含多个可以路由的组件,因为它们具有 @page 指令。

这是我的代码

App.razor

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(App).Assembly"
            AdditionalAssemblies="typeof(MyRazorLibrary.SomeClass).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
            <FocusOnNavigate RouteData="@routeData" Selector="h1" />
        </Found>
        <NotFound>
            <PageTitle>Not found</PageTitle>
            <LayoutView Layout="@typeof(MainLayout)">
                <p role="alert">Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>

在该示例中,我将 Razor 类库添加为附加程序集,因此 blazor 应用程序会添加路由该程序集上的所有页面组件。它有效。

但是,我想防止程序集的每个页面都可以被路由,因为它是一个 RCL,可以由不同的 Blazor 应用程序使用,并且我想在每个应用程序上选择我想要的确切页面。

可以吗?

我希望在列表中添加我想要从 RCL 使用的页面的特定类型。像这样的东西:

Blazor 应用程序 N°1

  • RCL 上的页面 A --> 包含在路由器上。
  • RCL 上的页面 B --> 包含在路由器上。
  • RCL 上的 C 页 --> 不包括。

Blazor 应用程序 N°2

  • RCL 上的页面 A --> 不包括。
  • RCL 上的页面 B --> 包含在路由器上。
  • RCL 上的 C 页 --> 不包括。
blazor blazor-server-side router razor-class-library blazor-routing
1个回答
0
投票

我知道的最简单的方法是从 RCL 中删除所有路由。这些页面仍然作为组件存在。

所以

Home
将是:


<PageTitle>Home</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

@code{
    [Parameter] public int ID {get;set;}
}

然后,您可以将路由添加到每个项目的单独的特定 RCL,或直接添加到项目中:

HomePage.razor

@page "/"
@page "/item/{ID:int}"

<Home ID="this.ID" />

@code {
    [Parameter] public int ID { get; set; }
}

请注意,您确实需要传递任何路由参数。

我实际上在我的应用程序中使用了这种方法。所有功能都在

Form
组件中。然后,该路线仅设置要使用的表单。

© www.soinside.com 2019 - 2024. All rights reserved.