我有一个场景,我需要重定向到定时器已用事件的新动作结果,这是我的代码,它当前不工作。
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);
}
在调试期间,我看到它每隔五秒钟就会触发一次已经过去的事件,但不会重定向。有什么帮助吗?
提前致谢。
答案 0 :(得分:0)
正如我的评论中所述,您无法从计时器事件返回操作结果。客户端已经从控制器接收到结果,并且您的计时器事件无法返回。因此,您的计时器事件将被触发,方法Homepage()将被执行并且结果将被丢弃。
http上下文有一个会话对象,可用于存储各种对象,例如到期日期。您可以从控制器方法访问当前会话。将日期存储在那里,在控制器操作中检索它并根据情况采取行动。当用户重新加载页面或打开第二个选项卡时,这也会起作用。关闭并重新打开浏览器(或选项卡)将创建一个新会话,有效地重置会话计时器。