2014-02-12 4 views
0

Я создаю сайт с asp.net. Я хотел бы иметь возможность редактировать html-вывод моей главной страницы, страниц и пользовательских элементов управления до того, как результат будет отправлен пользователю. Я нашел некоторые функции в Интернете, которые должны позволить мне редактировать код через функции prerender, но ни один из них, похоже, не работает.Редактировать вывод html перед отправкой пользователю

Я хотел бы удалить комментарии html из моего кода, например. Можно ли выполнять некоторые функции регулярных выражений на html перед рендерингом?

+0

Вы должны сделать это ОДИН РАЗ в процессе развертывания, а не как задачу на веб-сервере. – Maxim

ответ

1

Если вы просто хотите удалить комментарии из кода, прежде чем они будут переданы клиенту, измените способ комментирования. Используйте серверные комментарии = <%-- hi --%>:

Так что:

<!-- Don't remove the <p> below because our stupid clients are too stupid to figure out this form without it --> 
<p>Tip: The field labeled "First Name" is meant for your first name. Don't type in your last name in this box.</p> 
<%-- Don't remove this <p> either because both our clients and our boss are too dumb to figure it out --%> 
<p>Tip 2: Type your last name in the field labeled "Last Name".</p> 

Будет оказана как:

<!-- Don't remove the <p> below because our stupid clients are too stupid to figure out this form without it --> 
<p>Tip: The field labeled "First Name" is meant for your first name. Don't type in your last name in this box.</p> 

<p>Tip 2: Type your last name in the field labeled "Last Name".</p> 


Но, если вы на самом деле нужно изменить выходной HTML перед выводом на клиента в глобальном масштабе, и вы не можете просто исправить это в коде, вы можете сделать это на главной странице:

protected override void Render(System.Web.UI.HtmlTextWriter writer) 
{ 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter tw = new HtmlTextWriter(sw); 
    base.Render(tw); 
    string yourHTML = sw.ToString(); 
    // do stuff with yourHTML 
    writer.Write(yourHTML); 
    tw.Dispose(); 
    sw.Dispose(); 
} 

Таким образом, в очень простой Например, если у вас есть код

<h1>I'm a big fat h1</h1> 

вы могли бы в этой функции есть:

yourHTML = yourHTML.Replace("<h1>","<h5>"); 
yourHTML = yourHTML.Replace("</h1>", "</h5>"); 

Так что теперь выше код отображается как

<h5>I'm a big fat h1</h5> 

Чтобы выполнить очень законное требование об изменении всех h1 тегов на h5, прежде чем они будут переданы в браузер.

+0

Я получаю исключение, говоря, что пытаюсь писать в закрытый поток. – Jerodev

+0

@Jerodev. Гектометр Раньше у меня не было проблем с этим. Я обновил ответ. Посмотрите, поможет ли это. Изменены последние несколько строк. – MikeSmithDev

+0

Он по-прежнему дает ту же ошибку. – Jerodev

0

Я думаю, что вы ищете, ControlAdapters

Я использовал их раньше с SharePoint всем мне сделать выходной код более доступным. Вы регистрируете их в WebConfig, после чего передаются управляемые элементы управления. На этом этапе вы можете использовать regext для обработки и изменения emmited markup.

Смежные вопросы