如何从mvc中的计时器已过时事件重定向到操作结果

时间:2015-04-17 09:47:38

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我有一个场景,我需要重定向到定时器已用事件的新动作结果,这是我的代码,它当前不工作。

   public ActionResult ExistingClientConfirmation(AppointmentRequest model, FormCollection collection)
        {
            var appointment = AppointmentRequest.GetCurrent();

          try
            {
                if (!ValidateAppointmentNotBooked(appointment))
                {
                    return indexAction(appointment);
                }
                ValidateSession(appointment);
                if (collection != null)
                {
                    model.TimeInterval = collection["hdnTimeInterval"];
                    System.Timers.Timer aTimer = new System.Timers.Timer();
                    aTimer.Elapsed += (sender, e) => OnTimedEvent(sender, e, appointment);
                    aTimer.Interval = 5000;
                    aTimer.Enabled = true;
                }
                if (model != null)
                {
                    appointment.TimeInterval = model.TimeInterval;
                    appointment.Client = model.Client;
                }
                return RedirectToAction("ExistingClientConfirmation");

            }
            catch (Exception ex)
            {
                return HandleAndRedirectException(ex);
            }
        }

 public void OnTimedEvent(object source, ElapsedEventArgs e,AppointmentRequest appointment)
        {
            HomePage(appointment);
        }

        public ActionResult HomePage(AppointmentRequest appointment)
        {
            return indexAction(appointment);
        }

在调试期间,我看到它每隔五秒钟就会触发一次已经过去的事件,但不会重定向。有什么帮助吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

正如我的评论中所述,您无法从计时器事件返回操作结果。客户端已经从控制器接收到结果,并且您的计时器事件无法返回。因此,您的计时器事件将被触发,方法Homepage()将被执行并且结果将被丢弃。

http上下文有一个会话对象,可用于存储各种对象,例如到期日期。您可以从控制器方法访问当前会话。将日期存储在那里,在控制器操作中检索它并根据情况采取行动。当用户重新加载页面或打开第二个选项卡时,这也会起作用。关闭并重新打开浏览器(或选项卡)将创建一个新会话,有效地重置会话计时器。