1

我正在使用 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..
4

1 回答 1

0

我在 ActionMailer.net 上玩了一会儿,它似乎需要一个严格的结构。

我假设您的控制器看起来像这样 public EmailResult OrderComplete(OrderAcknowledgementViewModel orderAck) { To.Add(); 从 = ; 主题 = ; return Email("OrderComplete", orderAck); }

因此,如果这就是您的控制器的样子,那么这就是您需要做的。

在 Areas//Views/ 中创建一个文件夹,然后将 OrderComplete.html.cshtml 视图放入该新文件夹中。

于 2013-04-10T17:14:59.500 回答