2009-02-10 3 views
4

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

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

+0

Что вы имеете в виду "получить HTML"? Вам нужно получить доступ к нему на стороне сервера или вы хотите показать его своим пользователям? Как вы собираетесь использовать информацию и для чего? –

+0

получить HTMl - этим я хочу сказать, что хочу получить отображаемый HTML-файл по нажатию кнопки – 2009-02-10 09:49:24

+0

Я все еще не понимаю ... Вы хотите иметь «исходный код» где? что должно произойти, когда вы нажимаете кнопку? хотите ли вы обработать код на сервере или добавить его непосредственно в буфер обмена пользователя? каково ваше достижение с этим, так что мы все можем понять – balexandre

ответ

-1

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

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

Дополнительная информация о том, что вы хотите от этого.

+0

Не знаете, почему это было проголосовано, после выяснения я согласен с Люком (поддержал его ответ) – Charlie

+1

Один из возможных случаев (три года спустя): поиск рендеринга динамической страницы .Net в PDF на основе ввода/действий пользователя на сайте. – al3xnull

20

EDITED в ответ на разъяснение требований

Вы можете переопределить метод визуализации страниц, чтобы захватить источник 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 
} 
+0

Почему downvote? Это совершенно законный ответ. – LukeH

+2

Возможно, он вам не понравился :) – balexandre

+0

Почему этот метод не вызывается при загрузке страницы? –

2

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

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

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. Вот код на основе cleint-side.

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

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

Надежда, что помогает, Ник

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