Как я могу манипулировать страницей во время ее рендеринга?
Я хочу изменить некоторые элементы текста, когда страница покидает сервер (page_render, endRequest и т. Д.).
Как я могу получить доступ к странице и как мне найти элементы для изменения их значений, текстов?
3 ответа
Вы можете сделать это с помощью HttpModule. Он находится в конвейере и может выполнять предварительную и последующую обработку.
Например, взгляните на этот пробел.
Помимо HttpModules, вы также можете переопределить метод 'Render' (или сделать это на базовой странице, чтобы сделать его многократно используемым).
protected override void Render(HtmlTextWriter writer )
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
string html = stringWriter.ToString();
// do stuff with the html
writer.Write(html);
}
Есть несколько вариантов, и какой из них вам подойдет, во многом будет зависеть от того, какова реальная цель.
- Обработайте событие PreRender страницы и настройте любые элементы, которые вы хотите использовать в этом событии. В идеале вы должны поместить это в базовый класс, который наследуется всеми страницами, требующими такой обработки. Это дает вам доступ к фактической модели страницы и дереву управления.
- Установите фильтр, который даст вам прямой доступ к потоку ответов. Это можно реализовать двумя способами: в виде отдельного модуля HttpModule, который устанавливает фильтр, или вы можете установить фильтр непосредственно из Global.asax. Какой маршрут вы выберете, зависит от того, насколько многократно вам это нужно, причем HttpModule является наиболее пригодным для повторного использования.
Вот хорошая статья Изменение HTTP-ответа с помощью фильтров