【问题标题】:Using Components folder instead of Pages使用 Components 文件夹而不是 Pages
【发布时间】:2021-07-02 08:57:25
【问题描述】:

由于 Blazor 是基于组件的,并且组件可以位于多个页面上,我想使用 Components 文件夹(类似于 Features)而不是 Pages。例如,除了页面组件的 Dashboard 文件夹外,SPA 中的每个组件都会有单独的文件夹,例如 Chart、Gauge、List 等。这将消除在 Features 中对 Shared 文件夹的需要。所有组件都可以在一个地方访问并被其他页面组件使用。

从 .NET 5.0 的 Blazor Server 模板开始,将 Pages 文件夹更改为 Components 并将 @namespace 更改为 Blazor.Server.Components,我收到以下错误。

InvalidOperationException:找不到路由值指定的回退端点:{ page: /_Host, area: }。

应如何指定 Startup.cs 中的以下端点以更改对 Components 文件夹的引用?还有什么事情要做吗?

endpoints.MapFallbackToPage("/_Host");

谢谢!

【问题讨论】:

    标签: directory architecture components blazor


    【解决方案1】:

    您已经可以在任何您想要的文件夹配置中创建组件。您唯一需要保留的就是一些默认值,例如 _Host。

    那么继续吧: (1) 创建一个名为“组件”的文件夹 (2) 在你的文件夹中制作一些 .razor 组件 (3) 在您的页面中使用它们。

    【讨论】:

      【解决方案2】:

      在 blazor 服务器端,您需要告诉 blazor 您的根页面文件夹在哪里:

      private static void AddRootDirectory(IServiceCollection services)
      {
          services.AddRazorPages(options =>
          {
              options.RootDirectory = "/Views/Pages";
           });
      }
      

      你可以使用任何你喜欢的文件夹结构,只要记住.razor文件从文件夹结构中推断出命名空间。例如,如果您创建结构 /views/components,则应将此路径添加到您的导入中,或者在需要找到它的任何页面上使用 using 语句。您会注意到默认情况下,\Shared 文件夹在 _imports.razor 中提及

      您可以在.razor 页面上使用@namespace 指令覆盖推断的命名空间。

      Web 程序集将仅仅因为@page 属性而在当前程序集中查找页面。服务器端需要告诉服务器根页面在哪里,如上图。

      【讨论】:

      • 非常感谢。我虽然在 Blazor 中不需要剃刀文件夹指令,包括服务器端。现在我知道了,“知道就是成功的一半。”
      猜你喜欢
      • 2020-07-31
      • 1970-01-01
      • 2022-07-14
      • 2019-08-03
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2010-12-27
      • 2014-06-27
      相关资源
      最近更新 更多