@tagHelperPrefix
A implementação atual do Blazor v0.6.0 não tem suporte para Razor @tagHelperPrefix
Tentar incluir um componente filho dentro de um RenderFragment de um componente pai onde o filho e o RenderFragment têm o mesmo nome resultará em erro de tempo de compilação.
Vamos supor que temos um componente em Panel.cshtml
como segue:
<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; }
}
e outro componente em PanelHeader.cshtml
como este:
<div>@Title</div>
<div>@SubTitle</div>
@functions{
[Parameter] private string Title { get; set; }
[Parameter] private string SubTitle { get; set; }
}
então, usar esses dois componentes em uma página como o código abaixo resultará em um erro de tempo de compilação:
<Panel>
<PanelHeader>
<PanelHeader Title="some title" SubTitle="sub title"></PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<Panel>
Eu recomendaria adicionar suporte para @tagHelperPrefix
para simplificar a distinção de componentes de RenderFragments.
O código acima pode então ser reescrito da seguinte forma:
Panel.cshtml
seria assim:
<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; }
}
E PanelHeader.cshtml
ficaria assim:
<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; }
}
E, finalmente, os componentes filho e pai podem ser usados assim:
<pre1:Panel>
<PanelHeader>
<pre2:PanelHeader Title="some title" SubTitle="sub title"></pre2:PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<pre1:Panel>
Obrigado por esta sugestão!
Não planejamos adicionar suporte para @tagHelperPrefix
porque a intenção é que os componentes e parâmetros sigam as mesmas regras de resolução de nome que os tipos e propriedades .NET. Por exemplo, se você precisar qualificar o namespace de um nome de componente, basta especificar o namespace além de digitar o nome: <Namespace.MyComponent />
. Isso ainda não foi implementado, mas é monitorado por https://github.com/aspnet/Blazor/issues/1315.
Dito isso, seu cenário deve funcionar hoje como está, e o fato de não funcionar é um bug. É o equivalente a ter uma propriedade e tipo com o mesmo nome, o que não deve ser problema.
Oh, isso seria ótimo, mas ao mesmo tempo seria muito demorado para digitar todos os namespaces. Talvez, quando implementado, você pode adicionar um recurso para fornecer algo como using
instrução em C #
@fayezmm Sim, a boa notícia é que o Razor já tem uma diretiva @using
para isso.