1

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..
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 に答える