Как определить функцию, которая возвращает html в ядре asp.net - PullRequest
0 голосов
/ 30 августа 2018

В основном мне нужно что-то вроде старого asp.net

@helper MakeNote(string content) {
    <p><strong>Note</strong>&nbsp;&nbsp; @content    </p>
}

или JSX

MakeNote(note) {
   return (<div>Note {note}</div>);
}

Частичное представление не вариант. Я доволен либо функцией, возвращающей IHtmlString, либо функцией, записывающей основной писатель.

Он также должен поддерживать синтаксис Razor (а не только конкатенацию строк) внутри функции.

1 Ответ

0 голосов
/ 31 августа 2018

Возможно, вы ищете @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.

...