HTML 出力を変更するために、MasterPage の分離コードで CsQuery を使用するための「スケルトン」コードは何ですか? <body>
HTML のすべてを変更できるようにする必要がありますか?
CsQuery を使用して、デフォルトのコードを書き換えたりいじったりすることなく、動的データ Web サイトの HTML 出力を「修正」したいと考えています。
MasterPage コード ビハインドに固有のサンプル コードをお探しですか? ありがとう。
HTML 出力を変更するために、MasterPage の分離コードで CsQuery を使用するための「スケルトン」コードは何ですか? <body>
HTML のすべてを変更できるようにする必要がありますか?
CsQuery を使用して、デフォルトのコードを書き換えたりいじったりすることなく、動的データ Web サイトの HTML 出力を「修正」したいと考えています。
MasterPage コード ビハインドに固有のサンプル コードをお探しですか? ありがとう。
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)
{ }
}
Doc
2 つの仮想メソッドは、オブジェクトのプロパティに設定されている dom を変更できる場所です。CsQueryPage
ここでそれらを実装しないままにしておく意図は、継承する各 aspx ページCsQueryPage
が必要に応じてそれらをオーバーライドし、DOM に変更を加えられるようにすることです。
これが実際にどのように機能するかを確認するには、github から CsQuery コードを取得してサンプルを実行してください。
UserControl
例にも示されているように、同じ手法を a に使用できます。私は実際にそれを行う方法を示していませんMasterPage
が、それは非常に同じです -MasterPage
から派生し、他の状況と同じ方法UserControl
をオーバーライドするだけです。Render