MVC アプリケーションは初めてで、かみそりビューを文字列にレンダリングしようとしています。私が持っているコードは、独自のコントローラー内から呼び出されたときにうまく機能しますが、別のコントローラーからコントローラーを呼び出そうとすると、ControllerContext を送信しているにもかかわらず、Controller コンテキストが null になります。私はコンテキストをどこかで失っていると確信しています。
ここにいくつかのコードがあります。
ここでコントローラーを呼び出します。
var emailController = new EmailController();
emailController.ControllerContext = this.ControllerContext;
emailController.SendMail(entry.email, entry.first, entry.word);
ここで、html の文字列を返すメソッドを呼び出します。"Template" はビュー (Template.cshtml) で、emailTemplate は私が作成したばかりのモデルです。
var emailTemplate = new EmailModel
{
name = name,
emailAddress = emailAddress,
sent = "not Sent"
};
htmlFromView = renderRazorViewToString("Template", emailTemplate);
これは、ビューから html の文字列を返すメソッドです。問題は、viewContext が null を返すことです。
private string renderRazorViewToString(string viewname, object model)
{
ViewData.Model = model;
using (var sW = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewname);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sW);
viewResult.View.Render(viewContext, sW);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sW.GetStringBuilder().ToString();
}
}
他のコントローラーから EmailController を呼び出さない場合、これは完全に機能します。コンテキストもモデルに渡す必要がありますか?
助けてくれてありがとう。