在vb.net或C#网站
如何在离开服务器之前访问最终的html,以便我可以从代码隐藏中进行最终的html调整。(我不想使用JavaScript来进行这些调整)
是否会是最后一个触发事件的页面PreRenderComplete事件,我将能够看到发送到浏览器的html,我将能够使用HtmlAgilityPack编辑html?
这一定很容易做到并且可能
由于
答案 0 :(得分:1)
修改已经写好的HTML至少不是微不足道的(如果不是不可能的话)。响应被写入输出流,可能已经部分发送给客户端。
如果您使用WebForms,操作控件树并在呈现之前插入元素会更容易(PreRenderComplete听起来很正常)。
答案 1 :(得分:1)
您可以覆盖Page_Render
并轻松拦截输出流。这样做没有风险。在任何Page
中:
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
// intercept the output stream and write to your own
// StringWriter, bound to a StringBuilder
var sb = new StringBuilder();
var sw = new StringWriter(sb);
base.Render(sw);
string html = sb.ToString();
// do stuff to alter "html"
..
// write it to the real output stream
writer.Write(html)
}
如果您正在使用UpdatePanels
(异步回发),它可能会有点毛茸茸,因为HTML是以特殊方式格式化的。即使在那里,它也不是不可能改变的,但它需要更多的工作,因为UpdatePanel数据块实际上是校验和。 (幸运的是,这是一个非常简单的,只是内容的长度)。但不仅仅是改变内容并将其写回来那么简单。
但对于非异步回发,它看起来像任何其他HTML页面,将其改为您心中的内容。
答案 2 :(得分:1)
您好我只想在阅读我的帖子回复并在线搜索并参考此论坛帖子http://forums.asp.net/t/1146098.aspx/1并使用HtmlAggilityPack http://htmlagilitypack.codeplex.com/wikipage?title=Examples
这是代码
Imports System.IO
Imports HtmlAgilityPack
Partial Class Default2
Inherits System.Web.UI.Page
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
Dim mem As New System.IO.MemoryStream()
Dim twr As New System.IO.StreamWriter(mem)
Dim myWriter As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(twr)
MyBase.Render(myWriter)
myWriter.Flush()
myWriter.Dispose()
Dim strmRdr As New System.IO.StreamReader(mem)
strmRdr.BaseStream.Position = 0
Dim pageContent As String = strmRdr.ReadToEnd()
strmRdr.Dispose()
mem.Dispose()
writer.Write(AlterWithHTMLAGP(pageContent))
End Sub
Function AlterWithHTMLAGP(ByVal pageSource As String) As String
Dim htmlDoc As HtmlDocument = New HtmlDocument()
htmlDoc.OptionFixNestedTags = True
htmlDoc.LoadHtml(pageSource)
Dim newNode As HtmlNode = HtmlNode.CreateNode("<div>" & "someHtml" & "</div>")
Dim body As HtmlNode = htmlDoc.DocumentNode.SelectSingleNode("//body")
body.PrependChild(newNode)
Return htmlDoc.DocumentNode.WriteTo()
End Function
End Class