1

vb.net または C# Web サイト内

サーバーを離れる直前に最終的な html にアクセスして、コード ビハインドから最終的な html を微調整するにはどうすればよいですか (これらの調整に JavaScript を使用したくありません)。

HtmlAgilityPack で html を編集できるブラウザに送信された html を見ることができる最後のイベントになるのはページ PreRenderComplete イベントでしょうか?

これは簡単に実行でき、可能でなければなりません

ありがとう

4

3 に答える 3

1

すでに書き出されたHTMLを変更することは、少なくとも簡単ではありません(不可能でない場合)。応答は、すでに部分的にクライアントに送信されている可能性のある出力ストリームに書き込まれています。

WebFormsを使用している場合は、コントロールツリーを操作して、レンダリングする前に要素を挿入する方がはるかに簡単です(PreRenderCompleteのサウンドが適切です)。

于 2012-07-21T04:13:08.093 に答える
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 ページと同じように見えるので、好きなように変更してください。

于 2012-07-21T05:03:39.533 に答える
1

こんにちは、投稿への回答を読み、オンラインで検索を行った後、このフォーラムの投稿を参照して、 http://forums.asp.net/t/1146098.aspx/1 を使用して、思いついたことを共有したかっただけです。HtmlAggilityPack http://htmlagilitypack.codeplex.com/wikipage?title=例

ここにコードがあります

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
于 2012-07-21T18:02:02.170 に答える