私は電子メール用に使用しているhtmlテンプレートを持っています。私はそれにモデルを渡し、それをレンダリングして文字列変数に戻したいと思います。ASP.NET MVCがcontrollerContextのないhtmlテンプレートにモデルを渡します
どうすればこの問題を解決できますか?私はasp.net mvcに付属のレンダリングを使用できると確信しています。
私はコントローラ内でこれをやりたいのですが、controllercontextオブジェクトを使用していません。
私は電子メール用に使用しているhtmlテンプレートを持っています。私はそれにモデルを渡し、それをレンダリングして文字列変数に戻したいと思います。ASP.NET MVCがcontrollerContextのないhtmlテンプレートにモデルを渡します
どうすればこの問題を解決できますか?私はasp.net mvcに付属のレンダリングを使用できると確信しています。
私はコントローラ内でこれをやりたいのですが、controllercontextオブジェクトを使用していません。
@Mitch Rosenburgからのコメントを回答として使用してください:
私はDotLiquidテンプレートを使用しています。
自分で試したことはありませんが、Postalというライブラリがあり、自分のアプリで非常に似た機能を使用する予定です。
あなたは以下の方法でのようにそれを行うことができますありがとうございました。しかし、私はボディをサービス層まで送りたいと思っています。 –
:
private string ViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
そして、あなたのアクションメソッドでは、モデルは、あなたがに送信するモデルであり、この
ViewToString("Index", model);
のようにそれを使用することができますあなたの「テンプレート」
コントローラーの外でこれをやりたかったとは思わなかった。 :D –
私は一度同じことをしなければなりませんでした.HttpWebRequestを使用してビューを「レンダリング」し、その結果を文字列として取り込みました。
このソリューションには、(認証Cookieの取得、カスタムURLセキュリティレイヤーの電源供給などの)その他の問題が多数あり、非効率的で不合理だと感じましたが、締め切りは期限です。
コードはこのようなものに見えた:
public string GetEmailBody(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
return streamReader.ReadToEnd();
}
は、それが誰かに役立ちます願っています。
私はかなり長い間このことをやろうとしてきました。私はあなたにできることを保証しますが、解決策は簡単ではなく、少し汚いと感じています。代わりに[NDjango](http://ndjango.org/index.php?title=NDjango_Home)や[DotLiquid](http://dotliquidmarkup.org/)を調べましたか? –
好奇心で、コントローラの中でそれをやってみませんか? – Scott
@Scott、Webサービスがメソッドをトリガして電子メールを送信する可能性があります。 –