@tagHelperPrefix
Blazor v0.6.0的当前实现不支持Razor @tagHelperPrefix
尝试在子组件和RenderFragment具有相同名称的父组件的RenderFragment中包含子组件会导致编译时错误。
让我们假设我们在Panel.cshtml
有一个组件,如下所示:
<div class="panel panel-default">
<div class="panel-heading">@PanelHeader</div>
<div class="panel-body">@PanelBody</div>
</div>
@functions{
[Parameter] private RenderFragment PanelHeader { get; set; }
[Parameter] private RenderFragment PanelBody { get; set; }
}
以及PanelHeader.cshtml
另一个组件,如下所示:
<div>@Title</div>
<div>@SubTitle</div>
@functions{
[Parameter] private string Title { get; set; }
[Parameter] private string SubTitle { get; set; }
}
然后在类似以下代码的页面中使用这两个组件将导致编译时错误:
<Panel>
<PanelHeader>
<PanelHeader Title="some title" SubTitle="sub title"></PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<Panel>
我建议添加对@tagHelperPrefix
支持,以便简化与RenderFragments区别的组件。
上面的代码然后可以按如下方式重写:
Panel.cshtml
像这样:
<strong i="32">@tagHelperPrefix</strong> "pre1:"
<div class="panel panel-default">
<div class="panel-heading">@PanelHeader</div>
<div class="panel-body">@PanelBody</div>
</div>
@functions{
[Parameter] private RenderFragment PanelHeader { get; set; }
[Parameter] private RenderFragment PanelBody { get; set; }
}
PanelHeader.cshtml
看起来像这样:
<strong i="37">@tagHelperPrefix</strong> "pre2:"
<div>@Title</div>
<div>@SubTitle</div>
@functions{
[Parameter] private string Title { get; set; }
[Parameter] private string SubTitle { get; set; }
}
最后,子组件和父组件都可以像这样使用:
<pre1:Panel>
<PanelHeader>
<pre2:PanelHeader Title="some title" SubTitle="sub title"></pre2:PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<pre1:Panel>
感谢您的建议!
我们不打算增加对@tagHelperPrefix
支持,因为其目的是使组件和参数遵循与.NET类型和属性相同的名称解析规则。 例如,如果您需要使用名称空间来限定组件名称,则除了类型名称之外,只需指定名称空间: <Namespace.MyComponent />
。 尚未实现,但已通过https://github.com/aspnet/Blazor/issues/1315进行了跟踪
就是说,您的方案今天应该可以正常工作,而事实并非如此,我认为这是一个错误。 这等效于具有相同名称的属性和类型,这应该没问题。
哦,那太好了,但同时输入所有名称空间的时间也很长。 也许在实现后,您可以添加功能以在C#中提供类似using
语句的功能
@fayezmm是的,好消息是Razor已经@using
指令。