Razor 的可路由组件 Class 库未显示在 ASP.NET Core 6.0 WebAssembly 中
Routable componet of Razor Class Library not displayed in ASP.NET Core 6.0 WebAssembly
我有一个 ASP.NET Core 6.0 WebAssembly,其中包含一个 Razor class 库。该库包含多个组件,其中三个组件使用 @page
指令。登录后(使用 IdentityServer4 实现),它被定向到库中的一个可路由组件。问题:组件没有显示...
我检查了以下内容:
- 该库被 WebAssembly 引用
- 在
App.razor
中我添加了AdditionalAssemblies="new[] { typeof(Helper).Assembly, typeof(Confirmation).Assembly, typeof(HelperRegistration).Assembly }"
。
我发现了以下内容:
- Visual Studio 输出或浏览器 DevTools 控制台中均未显示任何错误。
- 浏览器 DevTools 的“网络”选项卡中没有任何值得注意的内容。
protected async override Task OnInitializedAsync()
的可路由组件被调用。
我试过这个:
- 从
OnInitializedAsync()
方法中调用布局组件的StateHasChanged()
方法。它背后的想法是
触发库中组件的渲染。
Razor class 库中的组件以前直接在 Blazor WebAssembly 中实现,这就是它的工作原理!我的目标是稍后将库与延迟加载集成。
您应该能够像这样测试您的图书馆页面:
- 使用
@page "/"
设置您的图书馆页面之一
- 设置
App
AppAssembly
指向 class 库。下面是一个例子。
<Router AppAssembly="@typeof(Blazor.App.UI.App).Assembly">
...
发生了什么。图书馆路线是否加载为默认路线?
基于响应的附加信息
我的一个测试解决方案中有这个,它有效。注意我使用完全限定的名称空间名称。 Blazor.App.UI.Index
是 Blazor.App.UI
assembly/namespace 中的索引页。我也喜欢保持我的 Razor 非常干净,这就是为什么在 @code 块中定义列表的原因。
@namespace Blazor.App.UI
@using System.Reflection
<Router AppAssembly="@typeof(Blazor.App.Core.ListOptions).Assembly" AdditionalAssemblies="@Assemblies">
<Found Context="routeData">
<RouteView 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>
@code {
private List<Assembly> Assemblies => new List<Assembly>() { typeof(Blazor.App.UI.Index).Assembly };
}
在你的行中:
AdditionalAssemblies="new[] { typeof(Helper).Assembly, typeof(Confirmation).Assembly, typeof(HelperRegistration).Assembly }"
Helper
、Configuration
和 HelperRegistration
是否在同一个程序集中?如果是这样,那么您应该只引用一次程序集。
我发现了错误。这不是组件的显示,而是我集成导航菜单的方式。没有像我预想的那样显示,但是当时没有显示任何组件是正确的。
提示帮助我找到了错误的原因。谢谢!
我有一个 ASP.NET Core 6.0 WebAssembly,其中包含一个 Razor class 库。该库包含多个组件,其中三个组件使用 @page
指令。登录后(使用 IdentityServer4 实现),它被定向到库中的一个可路由组件。问题:组件没有显示...
我检查了以下内容:
- 该库被 WebAssembly 引用
- 在
App.razor
中我添加了AdditionalAssemblies="new[] { typeof(Helper).Assembly, typeof(Confirmation).Assembly, typeof(HelperRegistration).Assembly }"
。
我发现了以下内容:
- Visual Studio 输出或浏览器 DevTools 控制台中均未显示任何错误。
- 浏览器 DevTools 的“网络”选项卡中没有任何值得注意的内容。
protected async override Task OnInitializedAsync()
的可路由组件被调用。
我试过这个:
- 从
OnInitializedAsync()
方法中调用布局组件的StateHasChanged()
方法。它背后的想法是 触发库中组件的渲染。
Razor class 库中的组件以前直接在 Blazor WebAssembly 中实现,这就是它的工作原理!我的目标是稍后将库与延迟加载集成。
您应该能够像这样测试您的图书馆页面:
- 使用
@page "/"
设置您的图书馆页面之一
- 设置
App
AppAssembly
指向 class 库。下面是一个例子。
<Router AppAssembly="@typeof(Blazor.App.UI.App).Assembly">
...
发生了什么。图书馆路线是否加载为默认路线?
基于响应的附加信息
我的一个测试解决方案中有这个,它有效。注意我使用完全限定的名称空间名称。 Blazor.App.UI.Index
是 Blazor.App.UI
assembly/namespace 中的索引页。我也喜欢保持我的 Razor 非常干净,这就是为什么在 @code 块中定义列表的原因。
@namespace Blazor.App.UI
@using System.Reflection
<Router AppAssembly="@typeof(Blazor.App.Core.ListOptions).Assembly" AdditionalAssemblies="@Assemblies">
<Found Context="routeData">
<RouteView 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>
@code {
private List<Assembly> Assemblies => new List<Assembly>() { typeof(Blazor.App.UI.Index).Assembly };
}
在你的行中:
AdditionalAssemblies="new[] { typeof(Helper).Assembly, typeof(Confirmation).Assembly, typeof(HelperRegistration).Assembly }"
Helper
、Configuration
和 HelperRegistration
是否在同一个程序集中?如果是这样,那么您应该只引用一次程序集。
我发现了错误。这不是组件的显示,而是我集成导航菜单的方式。没有像我预想的那样显示,但是当时没有显示任何组件是正确的。
提示帮助我找到了错误的原因。谢谢!