我是 MVC 应用程序的新手,我正在尝试将剃刀视图呈现为字符串。当我从自己的控制器中调用它时,我的代码效果很好,尽管当我尝试从另一个控制器调用控制器时,即使我向它发送 ControllerContext 控制器上下文最终为空。我确定我在某个我无法弄清楚的地方丢失了上下文。
这是一些代码。
这就是我称之为控制器的地方。
var emailController = new EmailController();
emailController.ControllerContext = this.ControllerContext;
emailController.SendMail(entry.email, entry.first, entry.word);
这是我调用将返回一串 html 的方法的地方。其中“模板”是一个视图(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,这将非常有效。我是否也需要将上下文传递给模型或类似的东西?
在此先感谢您的帮助。