Blazor:在 Razor 文件中定义命名空间

Posted

技术标签:

【中文标题】Blazor:在 Razor 文件中定义命名空间【英文标题】:Blazor: Define namespace in Razor File 【发布时间】:2020-07-16 06:33:11 【问题描述】:

问题:有没有办法在 Blazor 的 .razor 文件中定义命名空间。

问题说明:Blazor 中的 Razor 文件没有定义命名空间(只有类后面的代码有,它应该与项目中的 .razor 文件位置匹配)。这导致了 GitHub 上的一个问题,它限制了我提供带有少量命名空间的 Razor 组件库。

Github 问题:这源于我不认同的微软理念:文件名不区分大小写。我有一个文件夹,可以说它被命名为“FooBar”。在我的项目中,我将其重命名为“Foobar”。 Windows 没有正确重命名它,或者在 Github 中签入时它没有被视为更改。结果,我在命名空间“Foobar”后面的代码不再匹配我的 /razor 文件“FooBar”的命名空间,导致 Github 上出现构建错误(它在我的电脑上运行良好)。如果我能够在 .razor 文件中指定命名空间,就不会发生这种情况。

组件库问题:我正在制作一个我想在 NuGet 上提供的组件库。我想将所有组件保存在单独的文件夹中(假设为单一责任)。当我现在想要包含此组件库时,_imports 文件将为库中的每个文件夹都有一个 @include,这也是因为我无法将文件夹的工作与组件所在的命名空间分开。我想说@include Foobar而不是@include Foobar.Checkbox@include Foobar.Radiobutton等。

那么有什么解决办法吗?

【问题讨论】:

【参考方案1】:

好的,我没有找到这个谷歌搜索(虽然它可能在某个地方),但我尝试了以下方法:

在后面的代码中将命名空间 Foobar.Checkbox 重命名为 Foobar 在剃刀文件中添加@namespace Foobar

是的,就是这么简单facepalm

【讨论】:

感谢您发布此信息。将 blazor 组件添加到布局或页面需要命名空间定义,并且大多数页面(尤其是模板生成的布局)中缺乏明确的命名空间定义会令人困惑,因为它看起来不一致。【参考方案2】:

举个例子。您的 Blazor 组件名称是 Box,位于 Boxes 文件夹中。

你的命名空间应该是 Boxs - 对吧?

这样做: 在 Boxs 文件夹中添加一个名为 Box.razor.cs 的类。这个类是Box的C#代码,然后添加到这个类中:

using Microsoft.AspNetCore.Components;

namespace Boxes;

public partial class Box: ComponentBase

// @code ...


为方便起见,请将 Boxs 命名空间添加到 _imports.razor。

【讨论】:

你让我和其他人感到困惑。你使用盒子,盒子和盒子。你的逻辑也不是......逻辑上很好。为什么我要将它命名为 Boxes 而不是 Shapes 或 ProjectName.Shapes 或其他任何东西。您的代码是正确的,但这篇文章是如何在 razor 文件中使用命名空间,而不是后面代码中的部分类。

以上是关于Blazor:在 Razor 文件中定义命名空间的主要内容,如果未能解决你的问题,请参考以下文章

在 Blazor (.razor) 组件中添加多个组件

XML名命空间

Blazor_WASM之2:Razor语法

无法在默认 Blazor 服务器端项目中找到 Razor 页面

Blazor 脚手架注册页面为啥 .cshtml 不是 .razor 文件?

深入浅出Blazor webassembly之razor组件的C#代码组织形式