9

Web プロジェクトのビジネス オブジェクト エディタ ページで、オブジェクトの挿入または更新後に管理者に通知メールを送信しています。しかし、プレーンテキストメールを送信する代わりに、この目的のために準備した別の aspx ページ (Notification.aspx) の html 出力を送信したいと考えています。

まず、Notification.aspx のインスタンスを作成し、その RenderControl メソッドを使用して出力を取得できると考えました。

ただし、Editor.aspx ページの分離コードでは、通知の参照に到達して新しいインスタンスを作成することさえできません。

ページを別のページにロードしてレンダリングするためのベストプラクティスは何だろうか...

ありがとう。

4

6 に答える 6

25

次のようにして、ページをレンダリングできます。

StringWriter _writer = new StringWriter();
HttpContext.Current.Server.Execute("MyPage.aspx", _writer);

string html = _writer.ToString();
于 2009-03-15T14:12:45.383 に答える
0

この質問/回答を参照してください: ASP.NET の C# で HTML/E メール テンプレートを設定できますか? . Mark Brackett があなたが探しているものを持っていますが、他にも役立つアドバイスがたくさんあります。

于 2009-03-15T14:07:54.893 に答える
0

ページ クラスは、要求が行われたときに ASP.NET ランタイムによってインスタンス化されます。したがって、リクエストを作成してレスポンスを取得できます。

using (WebClient client = new WebClient())
using (Stream stream = client.OpenRead("http://mysite.com/notification.aspx"))
using (StreamReader reader = new StreamReader(stream))
{
    var contents = reader.ReadToEnd();
}
于 2009-03-15T14:10:02.143 に答える
0

トリッキーですね。正しくレンダリングするには、ページにも適切な HttpContext が必要になることに注意してください。

代わりに UserControl を使用することを検討します。これらは、メソッドを使用して簡単にロードおよびレンダリングできますPage.LoadControl()。ちょっとした工夫で、HTML を抽出している間、ページにレンダリングされないようにすることができます。

于 2009-03-15T14:10:30.677 に答える
0

ページはそのライフサイクルを通過しないため、RenderControl は機能しません。私は HttpHandler と Response.Filter を使用して、過去に同様の目的でストリームをキャプチャしました。以前、ASP.NET フォーラムにコードを投稿しました。

編集: ページ出力を変更する必要がある場合は、これをMartinNHが指摘したServer.Executeオーバーロードと組み合わせる必要があります。これにより、コードが簡素化され、Response.Filter などが削除されます。ページを直接出力したいだけなら、MartinNH の方法は非常にクリーンです。

于 2009-03-15T14:13:19.920 に答える
0

これはあなたが探しているものです:

Type t = BuildManager.GetCompiledType("~/mypage.aspx");
Page p = (Page)Activator.CreateInstance(t);
p.ProcessRequest(HttpContext.Current);

ここからは想像力を働かせてください....

于 2012-07-25T00:05:00.090 に答える