@tagHelperPrefix
Die aktuelle Implementierung von Blazor v0.6.0 unterstützt Razor @tagHelperPrefix
Der Versuch, eine untergeordnete Komponente in ein untergeordnete als auch das
Nehmen wir an, wir haben eine Komponente in Panel.cshtml
wie folgt:
<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; }
}
und eine andere Komponente in PanelHeader.cshtml
wie folgt:
<div>@Title</div>
<div>@SubTitle</div>
@functions{
[Parameter] private string Title { get; set; }
[Parameter] private string SubTitle { get; set; }
}
Die Verwendung dieser beiden Komponenten auf einer Seite wie dem folgenden Code führt zu einem Fehler bei der Kompilierung:
<Panel>
<PanelHeader>
<PanelHeader Title="some title" SubTitle="sub title"></PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<Panel>
Ich würde empfehlen, Unterstützung für @tagHelperPrefix
hinzuzufügen, um die Unterscheidung von Komponenten von RenderFragments zu vereinfachen.
Der obige Code kann dann wie folgt umgeschrieben werden:
Panel.cshtml
wäre wie folgt:
<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; }
}
Und PanelHeader.cshtml
würde so aussehen:
<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; }
}
Und schließlich können sowohl die untergeordnete als auch die übergeordnete Komponente folgendermaßen verwendet werden:
<pre1:Panel>
<PanelHeader>
<pre2:PanelHeader Title="some title" SubTitle="sub title"></pre2:PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<pre1:Panel>
Danke für diesen Vorschlag!
Wir planen nicht, Unterstützung für @tagHelperPrefix
hinzuzufügen, da Komponenten und Parameter denselben Regeln für die Namensauflösung wie .NET-Typen und -Eigenschaften folgen sollen. Wenn Sie beispielsweise einen Komponentennamen für den Namespace qualifizieren müssen, geben Sie einfach den Namespace zusätzlich zum Typnamen an: <Namespace.MyComponent />
. Dies ist noch nicht implementiert, wird jedoch von https://github.com/aspnet/Blazor/issues/1315 verfolgt.
Das heißt, Ihr Szenario sollte heute so funktionieren, wie es ist, und die Tatsache, dass es meiner Meinung nach nicht funktioniert, ist ein Fehler. Dies entspricht einer Eigenschaft und einem Typ mit demselben Namen, was in Ordnung sein sollte.
Oh, das wird großartig, aber gleichzeitig wäre es sehr langwierig, alle Namespaces einzugeben. Wenn Sie implementiert sind, können Sie möglicherweise eine Funktion hinzufügen, um eine Anweisung wie using
in C # bereitzustellen.
@fayezmm Yup , die gute Nachricht ist, dass Razor bereits eine @using
Direktive dafür hat.