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 в эту новую папку.