получить HTML-код текущей страницы без ViewState ASP.Net - PullRequest
4 голосов
/ 10 февраля 2009

Есть ли способ, с помощью которого я могу получить HTML моей текущей страницы. Под текущей страницей я имею в виду, скажем, я работаю над Default.aspx и хочу получить HTML, предоставив на нем кнопку.

Как это получить.

Ответы [ 3 ]

20 голосов
/ 10 февраля 2009

ИЗМЕНЕНО в ответ на уточнение требований

Вы можете переопределить метод рендеринга страницы для захвата источника HTML на стороне сервера.

protected override void Render(HtmlTextWriter writer)
{
    // setup a TextWriter to capture the markup
    TextWriter tw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(tw);

    // render the markup into our surrogate TextWriter
    base.Render(htw);

    // get the captured markup as a string
    string pageSource = tw.ToString();

    // render the markup into the output stream verbatim
    writer.Write(pageSource);

    // remove the viewstate field from the captured markup
    string viewStateRemoved = Regex.Replace(pageSource,
        "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\".*?\" />",
        "", RegexOptions.IgnoreCase);

    // the page source, without the viewstate field, is in viewStateRemoved
    // do what you like with it
}
2 голосов
/ 18 марта 2009

Не уверен, почему вы хотите то, что хотите, но ... это не в моей голове, т.е. я не пробовал этот код.

Добавьте на кнопку клик на стороне клиента, чтобы показать разметку, и сделайте что-то вроде этого:

function showMarkup() {
      var markup = "<html>" + document.getElementsByTagName("html")[0].innerHTML + "</html>";

      alert(markup); // You might want to show a div or some other element instead with the markup variable as the inner text because the alert might get cut off.
}

Если вам по какой-то причине требуется, чтобы эта визуализированная разметка была отправлена ​​обратно на сервер, сохраните закодированную разметку в скрытом вводе и отправьте ее обратно. Вы можете зарегистрировать скрипт ниже на стороне сервера, используя ClientScriptManager.RegisterOnSubmitStatement. Вот код со стороны Клинта.

var markup = escape("<html>" + document.getElementsByTagName("html")[0].innerHTML + "</html>");
var hiddenInput = $get('hiddenInputClientId');

if (hiddenInput) {
      hiddenInput.value = markup;
}

Надеюсь, это поможет, Ник

0 голосов
/ 10 февраля 2009

Я все еще не уверен, какова ваша цель с этим. Но если вы хотите получить общий вывод страницы, то вам, вероятно, лучше взглянуть на некоторый код на стороне клиента, так как он будет выполнен после того, как сервер вернет полностью обработанный HTML.

В противном случае вы могли бы ловко поймать событие разгрузки страницы и что-то сделать с отображаемым контентом.

Требуется больше информации о том, что вы хотите от этого.

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