我正在使用ActionMailer.net从我的MVC4应用程序发送电子邮件。
当我的初始化控制器和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);
}
}下面是上面调用的标准send email控制器操作,它位于不同的区域: 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",这是启动控制器的区域,而不是当前控制器区域。我相信这就是Email方法寻找基于this的视图的地方
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..发布于 2013-04-11 01:15:00
我曾经尝试过使用ActionMailer.net,它似乎需要一个严格的结构。
我假设你的控制器看起来像这个公共电子邮件(OrderAcknowledgementViewModel orderAck) { To.Add();From =;Subject =;return Email("OrderComplete",orderAck);}
所以,如果这就是你的控制器的样子,这就是你需要做的。
在Areas//Views/中创建一个文件夹,然后将OrderComplete.html.cshtml视图放到这个新文件夹中。
https://stackoverflow.com/questions/15932001
复制相似问题