ActionMailer.Net Не удается найти вид в другой области

Я использую 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..

1 ответ

Я немного поигрался с ActionMailer.net, похоже, требует строгой структуры.

Я предполагаю, что ваш контроллер выглядит примерно так: publicResult OrderComplete(OrderAcknowledgementViewModel orderAck) { To.Add(); С =; Тема =; возврат электронной почты ("OrderComplete", orderAck); }

Так что, если это то, как выглядит ваш контроллер, это то, что вам нужно сделать.

Создайте папку в областях // Представления / и затем поместите представление OrderComplete.html.cshtml в эту новую папку.

Другие вопросы по тегам