首页 > 解决方案 > Blazor 应用程序中的结构,为什么我不能拥有一个?

问题描述

因此,我使用dotnet new blazorserver. 在 VS 中打开解决方案并运行它。

美好的。

如果我添加一个新文件夹,比如说Components并在该文件夹中添加一个新的 Razor 组件Component1.razor- 然后在我的index.razor页面中添加一个 using 语句以指向我的Components文件夹和标记以包含组件本身并运行应用程序,即索引页面显示,但没有我的组件的迹象。进一步查看呈现的 HTML 的源代码,我看到一个空元素<component1></component1>

如果我将新组件移动到Pages文件夹并重新运行应用程序,则组件会正确呈现。

如果我在下创建一个子文件夹Pages并将我的组件移动到那里并重新运行应用程序,则该组件无法呈现。

难道我做错了什么?我期待太多了吗?我是否应该能够拥有一个结构,这意味着我不必将每个组件都放在一个文件夹中?

标签: visual-studio-2019blazorblazor-server-side

解决方案


我认为您错过了_Imports.razor. 您可以将页面放置在该@page ""属性可以找到的任何位置。如果您希望您的组件可用,请通过 引用其文件夹_Imports.razor或使用@namespace属性/指令将名称空间从其所在的文件夹覆盖到另一个正在导入的文件夹中。这里没有什么特别的事情发生。该模板在“共享”文件夹中放置了一条 using 语句。这就是为什么App.razor在根文件夹中可以访问它们。

示例_Imports.razor(来自名称/默认命名空间的项目PolymorphicApi)

...
@using PolymorphicApi
@using PolymorphicApi.Shared

如果您不想使用_Imports.razor,您可能不想让所有组件都可用。您可以@namespace在组件中使用。这与覆盖.cs文件中的默认命名空间相同。

例子 :

@namespace PolymorphicApi

使用此语句的组件可以位于任何子文件夹中,并且在已导入根命名空间时可用。

附带说明:_Imports.razor可以将其视为一大块 razor 语句,这些语句将被导入到该文件夹​​下的所有 razor 组件中。您不必仅将其用于命名空间。例如,您可以使用@inject 语句。默认情况下,我这样做是为了在每个组件中进行本地化。


推荐阅读