如果使用子布局,则需要指定应用程序在大多数情况下使用的MainLayout,即MainLayout.razor
。
ChatPageLayout.razor
在一个单独的DLL中。
@inherits LayoutComponentBase
@layout MainLayout <---- How to specify what consumer uses
<ChatRoom RoomName="TestRoom" >
<ChatNav />
@body
</ ChatRoom>
如何指定或提供库使用者使用的布局的值类型。
不太确定你的问题是什么,所以这里有几个答案取决于问题的真正含义。
如果您只想引用另一个库中的Layout
,那么将该引用添加到项目中,然后完全引用它,或者将@namespace添加到_Import.razor
中。
@layout Blazor.Starter.Shared.MainLayout
如果您想在运行时更改它,那么就不能使用开箱即用的代码。页面的布局在编译时设置为属性。@layout
变为
[Microsoft.AspNetCore.Components.LayoutAttribute(typeof(MainLayout))]
public partial class Index : Microsoft.AspNetCore.Components.ComponentBase
布局和所有内容都由RouteView
组件呈现。您可以在此处更改默认值,但如果您想在运行时管理布局,则需要编写一个新的RouteView
。
// App.razor
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>