Можно ли получить HTML-контент между «использованием» - PullRequest
1 голос
/ 28 марта 2011

Я создал новый помощник HTML с ctor и функцией Dispose, и во время инициализации моего управления я пишу некоторый HTML. Как это:

<% using(Html.BeginScript()) { %>
    var jan = "hoi";
    alert(jan);
<% } %>

Есть ли способ захватить там внутренний HTML? Переопределение TextWriter не работает:

public class MvcScriptWrapper: IDisposable
{
    private readonly MemoryStream _ms;
    private readonly TextWriter _tw;
    private readonly TextWriter _originalTw;

    public MvcScriptWrapper(HtmlHelper htmlHelper)
    {
        _ms = new MemoryStream();
        _tw = new StreamWriter(_ms);

        _originalTw = htmlHelper.ViewContext.Writer;

        htmlHelper.ViewContext.Writer = _tw;
    }

    public void Dispose()
    {
        _tw.Flush();

        _ms.Seek(0, SeekOrigin.Begin);

        string content;
        using(StreamReader sr = new StreamReader(_ms))
        {
            originalTw.Write(sr.ReadToEnd());
        }

        _tw.Dispose();
    }
}

1 Ответ

1 голос
/ 28 марта 2011

edit Для решения подобных проблем я написал библиотеку под названием Moth .Помимо ускорения создания ваших сайтов, он также поддерживает архитектуру плагинов, которая подключается к потоку страниц MVC (MVC 2 и 3), который можно использовать для применения постобработки HTML.Для примера см. этого исполнителя .

Вызовите эту функцию для регистрации вашего постпроцессора.

MothAction.RegisterExecutor(new YourExecutor());

Настройка InnerWriter работает:

// ctor

_originalTw = ((HtmlTextWriter)htmlHelper.ViewContext.Writer).InnerWriter;
((HtmlTextWriter)htmlHelper.ViewContext.Writer).InnerWriter = _tw;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...