Solución:
Podrías estar buscando @functions
ese uso Html.Raw
.
A continuación, se muestra un ejemplo que muestra dos estilos de función. El primero usa un cuerpo de bloque tradicional, el segundo usa un cuerpo de expresión.
Ambos tienen el [email protected]
prefijo en la cadena.
- los
$
habilita{interpoloation}
en la cuerda. - los
@
hace una cadena literal, que puede abarcar varias líneas.
La tercera forma es una especie de truco que nos permite analizar Razor dentro de la función. Es lo más cerca que parece que podemos llegar al original. @helper
sintaxis.
SomeRazorFile.cshtml
@using Microsoft.AspNetCore.Html
@functions
{
IHtmlContent MakeNote(string content)
{
return Html.Raw($@"
<p>
<strong>Note</strong> {content}
</p>
");
}
// an alternative that uses method shorthand
IHtmlContent MakeNoteToo(string content) => Html.Raw([email protected]"
<p>
<strong>Note</strong> {content}
</p>
");
}
@{
// an alternative that parses razor
Func<string, IHtmlContent> MakeNoteThree =
@<p>
<strong>Note</strong> {@item}
</p>;
}
<div>
@MakeNote("Foo")
@MakeNoteToo("Bar")
@MakeNoteThree("Baz")
</div>
Editar: se agregó un ejemplo que analiza Razor. Consulte https://github.com/aspnet/Razor/issues/715 para obtener más detalles.
Ya que ASP.NET Core 3.0, podemos declarar Funciones locales que contiene el marcado para que sirva como métodos de creación de plantillas, dentro Bloques de código de afeitar:
@{
void RenderName(string name)
{
<p>Name: <strong>@name</strong></p>
}
RenderName("Mahatma Gandhi");
RenderName("Martin Luther King, Jr.");
}
Que genera el siguiente código HTML:
<p>Name: <strong>Mahatma Gandhi</strong></p>
<p>Name: <strong>Martin Luther King, Jr.</strong></p>
Documentación: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-3.0#razor-code-blocks
(solo para completar) En ASP.NET Core 2.0 nosotros podemos usar Delegados de Templated Razor, que combinado con el <text></text>
etiqueta de afeitar (Transición Delimitada Explícita), nos permite hacer algo similar a ASP.NET MVC de antaño @helper
etiqueta:
@{
Func<string, object> RenderName = @<text>
<p>
Name: <strong>@item</strong>
</p>;
</text>;
}
<div>
@RenderName("Victor")
</div>
Que genera el siguiente código HTML:
<div>
<p>
Name: <strong>Victor</strong>
</p>
</div>
Documentación: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-2.0#templated-razor-delegates
Documentación <text></text>
: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-2.0#razor-code-blocks