我正在使用下面的方法渲染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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前,它存在于BaseController中,我想将其移出一个帮助方法,以便我可以移动我的电子邮件模型构建/发送出控制器.
问题是我无法访问ViewData/TempData/ControllerContext
我可以新建一个ControllerContext,但我不知道如何处理ViewData/TempData.
这就是我目前在Controller中使用的方法:
//Do Stuff in Controller
var html = RenderPartialViewToString("~/Views/Mail/_ForgotPassword.cshtml", new MailModel { Username = "Skrillex", SomethingElse = "foo" });
//Send the Email
Run Code Online (Sandbox Code Playgroud)
我认为你的做法是对的,但问题是你急于彻底分离,实在是太急了。
您正在使用 Razor 视图引擎来呈现富文本 HTML 电子邮件。这是一种非常崇高的做法。然而,这意味着您将非常接近表示层,并且从控制器外部运行它 - 在我看来 - 没有多大意义。
我相信你需要制作(如果尚未制作):
所以重点是,渲染的调用不需要离开控制器,电子邮件模型的构建应该。
现在,如果您正在执行所有这些操作,则意味着我还没有理解您的问题并且需要更多解释。
| 归档时间: |
|
| 查看次数: |
4777 次 |
| 最近记录: |