@tagHelperPrefix
La implementación actual de Blazor v0.6.0 no es compatible con Razor @tagHelperPrefix
Intentar incluir un componente secundario dentro de un RenderFragment de un componente principal donde tanto el secundario como el RenderFragment tienen el mismo nombre resultará en un error de tiempo de compilación.
Supongamos que tenemos un componente en Panel.cshtml
como sigue:
<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; }
}
y otro componente en PanelHeader.cshtml
como este:
<div>@Title</div>
<div>@SubTitle</div>
@functions{
[Parameter] private string Title { get; set; }
[Parameter] private string SubTitle { get; set; }
}
luego, el uso de estos dos componentes en una página como el siguiente código dará como resultado un error de tiempo de compilación:
<Panel>
<PanelHeader>
<PanelHeader Title="some title" SubTitle="sub title"></PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<Panel>
Recomendaría agregar soporte para @tagHelperPrefix
para simplificar la distinción de componentes de RenderFragments.
El código anterior se puede volver a escribir de la siguiente manera:
Panel.cshtml
sería así:
<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; }
}
Y PanelHeader.cshtml
se vería así:
<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; }
}
Y finalmente, tanto el componente secundario como el principal se pueden usar así:
<pre1:Panel>
<PanelHeader>
<pre2:PanelHeader Title="some title" SubTitle="sub title"></pre2:PanelHeader>
</PanelHeader>
<PanelBody>Some content ...</PanelBody>
<pre1:Panel>
¡Gracias por esta sugerencia!
No planeamos agregar soporte para @tagHelperPrefix
porque la intención es que los componentes y parámetros sigan las mismas reglas de resolución de nombres que los tipos y propiedades de .NET. Por ejemplo, si necesita calificar el espacio de nombres de un nombre de componente, simplemente debe especificar el espacio de nombres además del nombre de tipo: <Namespace.MyComponent />
. Esto aún no se ha implementado, pero https://github.com/aspnet/Blazor/issues/1315 lo rastrea
Dicho esto, su escenario debería funcionar hoy como está, y el hecho de que no lo haga, creo que es un error. Es el equivalente a tener una propiedad y un tipo con el mismo nombre, lo que debería estar bien.
Oh, eso será genial, pero al mismo tiempo sería muy largo escribir todos los espacios de nombres. Quizás, cuando se implemente, puede agregar una función para proporcionar algo como using
declaración en C #
@fayezmm Sí, la buena noticia es que Razor ya tiene una directiva @using
para eso.