有什么方法可以让我获得当前页面的HTML。按当前页面,我的意思是假设我正在使用Default.aspx并希望通过在其上提供一个按钮来获取HTML。
如何获得它。
答案 0 :(得分:20)
为了澄清要求而编辑
您可以覆盖页面的render方法以捕获服务器端的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
}
答案 1 :(得分: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端代码。
var markup = escape("<html>" + document.getElementsByTagName("html")[0].innerHTML + "</html>");
var hiddenInput = $get('hiddenInputClientId');
if (hiddenInput) {
hiddenInput.value = markup;
}
希望有所帮助, 尼克
答案 2 :(得分:-1)
我仍然不确定你的目标是什么。但是如果你想要页面的总渲染输出那么你最好看一些客户端代码,因为一旦服务器返回完全渲染的HTML就会运行它。
否则,您可以合理地捕获页面卸载事件并对其中的呈现内容执行某些操作。
您需要的更多信息。