我想编写一个 Web Api 控制器操作,根据结果发送电子邮件。我想使用带有数据模型的 MVC 视图或部分视图来呈现电子邮件正文。
有没有办法做到这一点?
我想要这样的东西:
public class NotificationApiController : ApiController
{
private IMkpContext db;
public string ViewNotifications()
{
var dataModel = GetDataModel();
if (dataModel != null)
{
SendEmail(dataModel.ToAddress, dataModel.FromAddress, dataModel.Subject, RenderBody("viewName", dataModel);
}
return string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
其中 RenderBody 将查找 viewName,用 dataModel 中的数据填充它,并将 View 呈现为字符串。
如果您不想使用评论中建议的 RazorEngine 方法,您可以定义一个类,如下所示:
\n\npublic static class ViewUtil\n{\n public static string RenderPartial(string partialName, object model)\n {\n var sw = new StringWriter();\n var httpContext = new HttpContextWrapper(HttpContext.Current);\n\n // point to an empty controller\n var routeData = new RouteData();\n routeData.Values.Add("controller", "EmptyController");\n\n var controllerContext = new ControllerContext(new RequestContext(httpContext, routeData), new EmptyController());\n\n var view = ViewEngines.Engines.FindPartialView(controllerContext, partialName).View;\n\n view.Render(new ViewContext(controllerContext, view, new ViewDataDictionary { Model = model }, new TempDataDictionary(), sw), sw);\n\n return sw.ToString();\n }\n}\n\nclass EmptyController : Controller { }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5363 次 |
| 最近记录: |