mvc 4 アプリケーションからメールを送信するために ActionMailer.net を使用しています。
これは、開始コントローラーとアクションメーラーのコントローラーとビューが同じエリアにある場合に機能します。ただし、ビューが見つからないため、そうでない場合は失敗します。
この階層は次のように機能します。
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"] 現在のコントローラー領域ではなく、開始コントローラーの領域である「モバイル」を返します。これは、Email メソッドがこれに基づいてビューを探している場所だと思います
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..