我正在使用 ActionMailer.net 从我的 mvc 4 应用程序发送电子邮件。
当我的启动控制器和 actionmailer 控制器和视图位于同一区域时,此方法有效。但是当它们不在时失败,因为它找不到视图。
这种层次结构有效:
Area: Emails
Controller:ManageOrders
Controller:SendEmails
View: OrderAck.html.cshtml
但这不会:
Area: OrderMgmt
Controller:ManageOrders
Area: Emails
Controller:SendEmails
View: OrderAck.html.cshtml
由于我想集中我的代码而不是重复它,我将需要从我的应用程序中的多个区域发送相同的订单确认电子邮件。
将路径作为视图名称的一部分放在 Email() 方法参数中不起作用:
return Email("~/OrderMgmt/OrderAck", orderAck);
我还能如何实现这一目标?
更新:这是代码:
用户提交表单发起的发起控制器:Areas\Mobile\Controllers\MakePartForWorkReleaseController.cs
[HttpPost]
public ActionResult PullList(ContainerPullListViewModel ContainerPullListViewModel)
{
if (ModelState.IsValid)
{
var emailResult = manageOrdersController.SendOrderCompleteEmail(ContainerPullListViewModel.OrderId, baseUrl, ControllerContext);
}
}
这是上述调用的标准发送电子邮件控制器操作,它位于不同的区域:Areas\OrderMgmt\Controllers\ManageOrdersController.cs
public JsonResult SendOrderCompleteEmail(int id, string baseUrl, ControllerContext controllerContext)
{
string recipients = "";
OrderAcknowledgementViewModel orderAck = new OrderAcknowledgementViewModel();
//Call ActionMailer action controller to send email
new OrderMgmtEmailController().OrderComplete(notifyList, orderAck).Deliver();
}
这是实际发送电子邮件的 actionmailer.net 控制器操作:Areas\OrderMgmt\Controllers\OrderMgmtEmailController.cs
请注意,当我检查时: HttpContextBase.Request.RequestContext.RouteData.DataTokens["area"] 它返回“Mobile”,这是启动控制器的区域,而不是当前控制器区域。我相信这是电子邮件方法正在寻找基于此的视图的地方
public EmailResult OrderComplete(IEnumerable<CustomerContact> recipientList, OrderAcknowledgementViewModel orderAck)
{
return Email("~/Areas/OrderMgmt/Views/OrderMgmtEmail/OrderComplete", orderAck);
}
视图位于:Areas\OrderMgmt\Views\OrderMgmtEmail\OrderComplete.html.cshtml
我得到的错误是:
You must provide a view for this email. Views should be named ~/Areas/OrderMgmt/Views/OrderMgmtEmail/OrderComplete.txt.cshtml or ~/Areas/OrderMgmt/Views/OrderMgmtEmail/OrderComplete.html.cshtml (or aspx for WebFormsViewEngine) depending on the format you wish to render..