在 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
Blazor 应用程序 N°2
我知道的最简单的方法是从 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
组件中。然后,该路线仅设置要使用的表单。