C# 如何从mvc中的计时器已过事件重定向到操作结果
我有一个场景,我需要重定向到计时器经过事件的新操作结果,这是我的代码,它当前不工作C# 如何从mvc中的计时器已过事件重定向到操作结果,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我有一个场景,我需要重定向到计时器经过事件的新操作结果,这是我的代码,它当前不工作 public ActionResult ExistingClientConfirmation(AppointmentRequest model, FormCollection collection) { var appointment = AppointmentRequest.GetCurrent(); try {
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);
}
在调试过程中,我看到它每五秒钟就会触发一次已用事件,但没有重定向。需要帮忙吗
提前感谢。正如我在评论中所说,您不能从计时器事件返回操作结果。客户端已经从控制器接收到结果,您的计时器事件没有要返回的内容。因此,计时器事件将触发,方法主页将被执行,结果将被丢弃
http上下文有一个会话对象,可用于存储各种对象,例如过期日期。您可以从控制器方法访问当前会话。将日期存储在那里,在控制器操作中检索它,并根据情况采取行动。当用户重新加载页面或打开第二个选项卡时,这也会起作用。关闭并重新打开浏览器或选项卡将创建一个新的会话,有效地重置会话计时器。我想返回相同的操作是不可能的。我看不出你为什么这样做,试图创建无限循环,如果它工作的话。嗨,客户端有一个计时器,我限制用户在10分钟内预约,否则它将过期并重定向到主页,在所有浏览器中都可以正常工作等等。,当我尝试在手机中同一浏览器的两个不同选项卡中打开同一个约会时,我遇到了一个问题,只有计时器正在运行的活动选项卡,在预订选定时段的约会后,我不应允许,在我的情况下,在完成“在活动中预订”选项卡后,如果我打开“单击第二个”选项卡,它将从我停止的位置恢复,并允许用户预订。需要停下来。计时器不会那样工作的。当某些事件发生时,控制器方法无法调用浏览器查看您的OnTimedEvent-主页控制器操作的结果会去哪里?OnTimedEvent没有返回类型。您可以将过期时间存储在当前会话中的某个位置。您的HTTP上下文有一个会话对象,可用于存储各种信息并在每个控制器操作中检索该值。在那里,您可以根据过期/仍然有效的情况做出反应。您是对的,但我正在寻找自动过期的方法。感谢您的输入,我找到了一些解决方法,在会话中保持第一个活动时间并比较计时器值(如果不重定向)。谢谢你的意见。