我发现了一些奇怪的事情,我想知道是否有人知道答案:
首先,这不是这个问题: Different method Calls in Blazor 该问题涉及 HTML 元素。我说的是组件。
所以我有自己的组件,名为 MyButton;并且它指定了 OnClick 参数:
我的按钮.razor
<button @onclick="OnClick">Do Something</button>
@code {
[Parameter]
public EventCallback<MouseEventArgs> OnClick { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用 MyButton 时,我可以准确地使用名称,即
<MyButton OnClick="SomeMethod" />
但这也有效:
<MyButton @onclick="SomeMethod" />
当我从 MyButton.razor 中删除整个 @code 块时,它们都会给我完全相同的错误消息:
<Mybutton OnClick="MyMethod" />
“MyButton”类型的对象没有与名称“OnClick”匹配的属性。
<Mybutton @onclick="MyMethod" />
“MyButton”类型的对象没有与名称“onclick”匹配的属性。
唯一的区别在于大写字母;“OnClick”与“onclick”......这是合乎逻辑的。所以看起来 @onclick 与 OnClick 相同...但它们是吗?
这只是某种超载吗?
问题:有没有办法在 Blazor 的 .razor 文件中定义命名空间。
问题解释:Blazor 中的 Razor 文件没有定义命名空间(只有类背后的代码有一个,它应该与项目中的 .razor 文件位置匹配)。这导致了 GitHub 上的一个问题,它限制了我提供具有很少命名空间的 Razor 组件库。
Github 问题:这源于我不赞同的 Microsoft 哲学:文件名不区分大小写。我有一个文件夹,可以说它被命名为“FooBar”。在我的项目中,我将其重命名为“Foobar”。Windows 没有正确重命名它,或者在 Github 中签入时它没有被视为更改。结果,我在命名空间“Foobar”后面的代码不再与我的 /razor 文件“FooBar”的命名空间匹配,导致 Github 上的构建错误(它在我的电脑上运行良好)。如果我能够在 .razor 文件中指定命名空间,这将不会发生。
组件库问题:我正在制作一个我想在 NuGet 上提供的组件库。我想将所有组件保存在单独的文件夹中(假设是为了单一责任)。当我现在想要包含这个组件库时,_imports 文件将为@include属于库一部分的每个文件夹都有一个,同样是因为我无法将文件夹与组件所在的命名空间分开。我想说的@include Foobar是比@include Foobar.Checkbox,@include Foobar.Radiobutton等等等等。
那么有没有办法解决这个问题?