2011-05-18 64 views
2

我使用的是asp.net mvc 3和石英调度程序。如何为控制器创建自己的http上下文?

目前我有这个

  1. 作业被创建和执行。
  2. 进入到一个控制器,我映射域与automapper
  3. 结果查看模型去哪里控制器我想用 Action Mailer

我得到一个错误

System.ArgumentNullException was unhandled by user code 
    Message=Value cannot be null. 
Parameter name: httpContext 
    Source=System.Web 
    ParamName=httpContext 
    StackTrace: 
     at System.Web.Routing.RequestContext..ctor(HttpContextBase httpContext, RouteData routeData) 
     at ActionMailer.Net.MailerBase.Email(String viewName, Object model, String masterName) 
     at EmailController.SendCalendarAppointmentNotifiation(CalendarAppointmentReminderVM vm) in EmailController.cs:line 73 
     at RemindersController.CalendarAppointmentsReminders(List`1 taskReminders) in RemindersController.cs:line 54 
     at QuartzJobs.AppointmentRemindersJob.Execute(JobExecutionContext context) in AppointmentRemindersJob.cs:line 39 
     at Quartz.Core.JobRunShell.Run() 
    InnerException: 

//工作

public void Execute(JobExecutionContext context) 
     { 


          // some code to do some checking and to get results above(not shown) 
          RemindersController remindersController = new RemindersController(); 
          remindersController.CalendarAppointmentsReminders(calendarAppointmentReminders); 

      } 

//控制器(要做映射)\

public void CalendarAppointmentsReminders(List<AppointmentReminder> appointments) 
     { 
      List<CalendarAppointmentReminderVM> vm = Mapper.Map<List<CalendarAppointment>, List<CalendarAppointmentReminderVM>>(appointments.Select(x => x.CalendarAppointment).ToList()); 
      Mapper.Map<List<AppointmentReminder>, List<CalendarAppointmentReminderVM>>(appointments, vm); 


      foreach (var v in vm) 
      { 
       new EmailController().SendCalendarAppointmentNotifiation(v); 
      } 

     } 

// MVC邮件

public EmailResult SendCalendarAppointmentNotifiation(CalendarAppointmentReminderVM vm) 
     { 
      To.Add(vm.To); 
      Subject = String.Format("Subject"); 
      return Email("SendCalendarAppointmentEmail", vm); 
     } 

模具对上return Email("SendCalendarAppointmentEmail", vm);我想,因为我用它来发送出我所有的电子邮件使用这一点,我觉得很多更好的方法来发送电子邮件(更容易使它们看起来更漂亮,因为您可以使用母版页和强类型视图)。

+0

您是否正确设置了SMTP设置? – 2011-05-18 19:28:34

+0

@ Brian Driscoll - 安装到本地文件夹和我所有其他的工作(用户请求和从我的控制器联系,我调用此电子邮件控制器并发送电子邮件...所以httpcontext是为我第一次打电话给控制器)​​ – chobo2 2011-05-18 19:31:17

+0

这个问题解决了吗?请提供详情。谢谢 – Keith 2011-08-06 21:56:34

回答

0

Quartz的作业执行不会在HttpRequest中运行。此外HttpContext.Current是NULL。 看来,这个asp.net邮件程序不工作没有asp.net请求环境(hava看看StackTrace)

结帐Render a view as a string(渲染视图,放入邮件和发送..),但不幸在这将所有示例与当前的ControllerContext/HttpContext一起发布。

+0

Müller - 是HttpContext为null。我其实混淆了我使用ActionMailer而不是asp.net mvc邮件程序的名称。我认为这两个电子邮件发件人都遭受同样的问题,他们需要HttpContext。我迷失在第一步。那是干什么的?所以在我的第一个控制器中,我应该放入第一步代码? – chobo2 2011-05-18 21:27:27

+0

我用mvc2做了这个,发送asp.net通过电子邮件在作业中呈现部分视图。我会发布你的代码 – benwasd 2011-05-19 07:26:43

+0

我如何使用它,但如果我需要httpContext? – chobo2 2011-05-22 00:02:46

相关问题