Возможно, вы ищете @functions
, которые используют Html.Raw
.
Вот пример, который показывает два стиля функций. Первый использует традиционное тело блока, второй использует тело выражения.
Оба имеют префикс $@
в строке.
-
$
включает {interpoloation}
в строке.
-
@
создает дословную строку, которая может занимать несколько строк.
Третий способ - это своего рода хак, который позволяет нам разобрать Razor внутри функции. Это так близко, как нам кажется, мы можем получить исходный синтаксис @helper
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($@"
<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>
Редактировать: добавлен пример, который анализирует Razor. Подробнее см. https://github.com/aspnet/Razor/issues/715.