首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionMailer.Net在不同区域找不到视图

ActionMailer.Net在不同区域找不到视图
EN

Stack Overflow用户
提问于 2013-04-11 00:57:54
回答 1查看 657关注 0票数 1

我正在使用ActionMailer.net从我的MVC4应用程序发送电子邮件。

当我的初始化控制器和actionmailer控制器和视图在同一区域时,这是有效的。但当它们不在时失败,因为它找不到视图。

这种层级结构是有效的:

代码语言:javascript
复制
Area: Emails
   Controller:ManageOrders
   Controller:SendEmails
   View: OrderAck.html.cshtml

但这不是:

代码语言:javascript
复制
Area: OrderMgmt
   Controller:ManageOrders

Area: Emails  
   Controller:SendEmails
   View: OrderAck.html.cshtml

因为我想集中我的代码而不是重复,所以我需要从我的应用程序中的多个区域发送相同的订单确认电子邮件。

在Email()方法参数中将路径作为视图名称的一部分不起作用:

代码语言:javascript
复制
return Email("~/OrderMgmt/OrderAck", orderAck);

我还能怎么做到这一点?

更新:代码如下:

用户提交表单发起的发起控制器: Areas\Mobile\Controllers\MakePartForWorkReleaseController.cs

代码语言:javascript
复制
[HttpPost]
    public ActionResult PullList(ContainerPullListViewModel ContainerPullListViewModel)
    {
        if (ModelState.IsValid)
        {
            var emailResult = manageOrdersController.SendOrderCompleteEmail(ContainerPullListViewModel.OrderId, baseUrl, ControllerContext);             
        }
    }

下面是上面调用的标准send email控制器操作,它位于不同的区域: Areas\OrderMgmt\Controllers\ManageOrdersController.cs

代码语言:javascript
复制
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",这是启动控制器的区域,而不是当前控制器区域。我相信这就是Email方法寻找基于this的视图的地方

代码语言:javascript
复制
public EmailResult OrderComplete(IEnumerable<CustomerContact> recipientList, OrderAcknowledgementViewModel orderAck)
{
   return Email("~/Areas/OrderMgmt/Views/OrderMgmtEmail/OrderComplete", orderAck);
}

视图位于: Areas\OrderMgmt\Views\OrderMgmtEmail\OrderComplete.html.cshtml

我得到的错误是:

代码语言:javascript
复制
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..
EN

回答 1

Stack Overflow用户

发布于 2013-04-11 01:15:00

我曾经尝试过使用ActionMailer.net,它似乎需要一个严格的结构。

我假设你的控制器看起来像这个公共电子邮件(OrderAcknowledgementViewModel orderAck) { To.Add();From =;Subject =;return Email("OrderComplete",orderAck);}

所以,如果这就是你的控制器的样子,这就是你需要做的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15932001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档