@tagHelperPrefix
L'implémentation actuelle de Blazor v0.6.0 ne prend pas en charge Razor @tagHelperPrefix
Essayer d'inclure un composant enfant dans un RenderFragment d'un composant parent où l'enfant et le RenderFragment ont le même nom entraînera une erreur de compilation.
Supposons que nous ayons un composant dans Panel.cshtml
comme suit:
<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; }
}
et un autre composant dans PanelHeader.cshtml
comme ceci:
<div>@Title</div>
<div>@SubTitle</div>
@functions{
[Parameter] private string Title { get; set; }
[Parameter] private string SubTitle { get; set; }
}
puis l'utilisation de ces deux composants dans une page comme le code ci-dessous entraînera une erreur de compilation:
<Panel>
<PanelHeader>
<PanelHeader Title="some title" SubTitle="sub title"></PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<Panel>
Je recommanderais d'ajouter la prise en charge de @tagHelperPrefix
afin de simplifier la distinction des composants de RenderFragments.
Le code ci-dessus peut alors être réécrit comme suit:
Panel.cshtml
ressemblerait à ceci:
<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; }
}
Et PanelHeader.cshtml
ressemblerait à ceci:
<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; }
}
Et enfin, les composants enfant et parent peuvent être utilisés comme ceci:
<pre1:Panel>
<PanelHeader>
<pre2:PanelHeader Title="some title" SubTitle="sub title"></pre2:PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<pre1:Panel>
Merci pour cette suggestion!
Nous ne prévoyons pas d'ajouter la prise en charge de @tagHelperPrefix
car l'intention est que les composants et les paramètres suivent les mêmes règles de résolution de nom que les types et propriétés .NET. Par exemple, si vous devez qualifier un espace de noms pour un nom de composant, vous devez simplement spécifier l'espace de noms en plus du nom de type: <Namespace.MyComponent />
. Cela n'est pas encore implémenté, mais est suivi par https://github.com/aspnet/Blazor/issues/1315.
Cela dit, votre scénario devrait fonctionner tel quel aujourd'hui, et le fait que ce ne soit pas le cas, je pense, est un bogue. C'est l'équivalent d'avoir une propriété et un type avec le même nom, ce qui devrait convenir.
Oh ce sera génial mais en même temps serait très long à taper dans tous les espaces de noms. Peut-être, une fois implémenté, vous pouvez ajouter une fonctionnalité pour fournir quelque chose comme l'instruction using
en C #
@fayezmm Oui , la bonne nouvelle est que Razor a déjà une directive @using
pour cela.