2011-05-18 41 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

相關問題