これが MVC であると仮定して、私のCsQueryプロジェクトを見てください。CsQuery は、HTML を直接操作するために使用できる jQuery ポートおよび CSS セレクター エンジンです。しかし、もっと重要なことは、プロジェクトには、MVC の下で C# でレンダリングする前に、ページの HTML にアクセスするためのコードの例が含まれていることです。
部分ビューへのアクセスは非常に簡単です。この件に関する Rick Strahl のブログ投稿を参照してください。
ただし、ページの HTML 全体にアクセスし、レンダリング前に変更する可能性がある場合は、カスタム を作成しViewEngine
、HTML にアクセスできるコントローラーへのコールバックを作成する必要があります。これを正しく行うにはかなりの作業が必要です。何百行ものコードをコピーするのではなく、CsQuery に含まれている MVC アプリの例、特にCsQueryView
フォルダー内のクラスを見てください。
https://github.com/jamietre/CsQuery/tree/master/examples/CsQuery.MvcApp
これには、カスタム ビュー エンジンと、次のようにコントローラーにメソッドを追加できるカスタム コントローラー基本クラスが含まれます。
// runs for all actions
public void Cq_Start()
{
Doc["a.not-allowed"]
.Attr("onclick","javascript:alert('You're not authorized to click this')");
}
// runs for the Index action
public void Cq_Index()
Doc["div"].Css("border", "1px solid red;");
}
これらのメソッドは、対応する通常のアクション メソッドの後Doc
に呼び出され、 の値を設定します。オブジェクト (CsQuery のコア オブジェクト) ですDoc
。CQ
これには、ページのすべての HTML が含まれます。jQuery オブジェクトのようなものです。あなたの状況では、次のような jQuery メソッドを使用できます。
// select all divs on the page
var div = Doc["div"];
// do parameter substitution
var newText = div.Text().Replace("@name", valid_name);
// update the text
div.Text(newText);
このビュー エンジンを使用するように MVC アプリを切り替えるには、次のコードを に追加する必要がありますApplication_Start
。
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CsQueryViewEngine());
ただし、CsQuery を使用したくない場合は、レンダリング前に MVC で HTML 出力にアクセスする方法を例で示します。リフレクションを使用して、コントローラーでコールバックするメソッドを見つけ出し、CsQuery オブジェクトの代わりに HTML の文字列を提供するように簡単に適応させることができます。