Могу ли я получить содержимое в виде строки при создании расширения HTML, такого как BeginForm? - PullRequest
2 голосов
/ 19 марта 2019

Я пытаюсь найти способ захвата внутреннего содержимого, передаваемого в расширение Html, в блоке using (аналогично Html.BeginForm). Я читал об использовании класса IDisposable для рендеринга конечного блока - это то, что я имею до сих пор:

public static class HtmlExtensions
{
    private class RZScript : IDisposable
    {
        private HtmlHelper _helper;
        private string _outputContent;

        public RZScript(HtmlHelper helper)
        {
            _helper = helper;
            _outputContent = new HtmlTextWriter(_helper.ViewContext.Writer).InnerWriter.ToString();
        }

        public void Dispose()
        {
            _helper.ViewContext.Writer.Write("(AAAA)" + _outputContent + "(CCCC)");
        }
    }

    public static IDisposable TestThis(this HtmlHelper htmlHelper)
    {
        return new RZScript(htmlHelper);
    }
}

Затем я проверяю этот тег с помощью:

<p>test</p>
@using (Html.TestThis())
{
    @:(BBBB)
}

Результат, который я надеюсь получить:

тест (AAAA) (BBBB) (CCCC)

Что я на самом деле получаю:

тест (BBBB) (AAAA) тест (CCCC)

Есть идеи, как (или если!) Я могу получить содержимое в строку? Спасибо.

1 Ответ

0 голосов
/ 20 марта 2019

Есть что-то работает. Не тот синтаксис, который был после, но результат тот же.

public static IHtmlString RegisterScriptInline(this HtmlHelper htmlHelper,
    Func<object, IHtmlString> content)
{
    string renderedContent = content.Invoke(null).ToString(); // Got it!!!
    return null;
}

И тогда это будет вызываться с чем-то вроде (расширенный пример, чтобы показать условия на стороне сервера в Razor действительно оценивают):

@Html.RegisterScriptInline(@<text>
    <script type="text/javascript">
        @if (someCondition)
        {
            @:var item = 'Value1';
        }
        else
        {
            @:var item = 'Value2';
        }
    </script>
</text>)

Здесь нет начального / конечного содержимого - однако все AAAA, CCCC и т. Д. В моем вопросе были разделителями, чтобы показать, что я пытался извлечь BBBB (!). Я не буду отмечать это как ответ для момент, так как он дает мне результат, который я хотел, но он не дает конкретного ответа на вопрос.

(Воспроизведение функциональности типа @section, если вам интересно ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...