0

HTML 出力を変更するために、MasterPage の分離コードで CsQuery を使用するための「スケルトン」コードは何ですか? <body>HTML のすべてを変更できるようにする必要がありますか?

CsQuery を使用して、デフォルトのコードを書き換えたりいじったりすることなく、動的データ Web サイトの HTML 出力を「修正」したいと考えています。

MasterPage コード ビハインドに固有のサンプル コードをお探しですか? ありがとう。

4

1 に答える 1

1

CsQuery プロジェクトには、 CsQuery.WebFormsAppプロジェクトでこれを行う方法を示す例があります (正しく機能していることを確認しました!) 。

使い方の核心はこんな感じ。Renderを継承するクラスでメソッドをオーバーライドし、これをaspx ページの分離コードの基本クラスとしてPage使用する必要があります。Page

public class CsQueryPage: System.Web.UI.Page
{
    public CQ Doc { get; protected set; }

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        // most of the work is done for you with the
        // `CsQuery.WebForms.CreateFromRender` method

        var csqContext = WebForms.CreateFromRender(this, base.Render, writer);

        // if you are using update panels, this lets you also manipulate that
        // HTML, otherwise you don't need the IsAsync part

        if (csqContext.IsAsync)
        {
            foreach (var item in csqContext.AsyncPostbackData) {
                 Cq_RenderUpdatePanel(item.Dom,item.ID);
            }
        }
        else
        {
            Doc = csqContext.Dom;
            Cq_Render();
        }

        // writes the altered content to the base HtmlTextWriter

        csqContext.Render();
    }

    protected virtual void Cq_Render() 
    { }

    protected virtual void Cq_RenderUpdatePanel(CQ doc, string updatePanelId) 
    { }
}

Doc2 つの仮想メソッドは、オブジェクトのプロパティに設定されている dom を変更できる場所です。CsQueryPageここでそれらを実装しないままにしておく意図は、継承する各 aspx ページCsQueryPageが必要に応じてそれらをオーバーライドし、DOM に変更を加えられるようにすることです。

これが実際にどのように機能するかを確認するには、github から CsQuery コードを取得してサンプルを実行してください。

UserControl例にも示されているように、同じ手法を a に使用できます。私は実際にそれを行う方法を示していませんMasterPageが、それは非常に同じです -MasterPageから派生し、他の状況と同じ方法UserControlをオーバーライドするだけです。Render

于 2013-07-30T14:17:46.897 に答える