【发布时间】:2012-02-04 22:33:04
【问题描述】:
我正在使用以下方法渲染 PartialViews/Models,以便对发送出去的电子邮件进行模板化。
我正在使用下面的代码将部分和模型转换为我可以传递给我的电子邮件发送代码的 html 字符串。
public class BaseController : Controller
{
public string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
throw new ArgumentException("No View Path Provided.");
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();
}
}
}
目前,它存在于 BaseController 中,我想将其移出到辅助方法中,以便我也可以将构建/发送的电子邮件模型移出控制器。
问题是我无权访问 ViewData/TempData/ControllerContext
我可以新建一个 ControllerContext,但我不知道如何处理 ViewData/TempData。
这就是我目前在控制器中使用的方式:
//Do Stuff in Controller
var html = RenderPartialViewToString("~/Views/Mail/_ForgotPassword.cshtml", new MailModel { Username = "Skrillex", SomethingElse = "foo" });
//Send the Email
【问题讨论】:
-
在视图的渲染中是否使用了 tempdata/viewdata?如果不是,为什么不传递空的?
-
我正在使用 ViewData 设置模型。
-
那么为什么它不是强类型视图呢?您必须使用松散视图吗?
-
"~/Views/Mail/_ForgotPassword.cshtml" 是强类型的。看来 ViewData.Model = model;正在设置模型。
标签: c# asp.net-mvc-3