Javascript MVC定时器动作
我正在尝试创建一个15分钟的计时器,当用户单击按钮“签出”或锁定案例时,它会启动一个计时器,在15分钟内运行一个操作来翻转数据库中的布尔开关,在15分钟后再次解锁该案例。我假设这需要在我的服务器端代码上完成,而不是在Javascript中,因为如果有人离开页面,脚本将无法运行。我希望我能在我的动作方法中插入一些可以做到这一点的东西。我已经研究过了,但还没有找到一个明确的答案。任何帮助都将不胜感激Javascript MVC定时器动作,javascript,jquery,asp.net-mvc,timer,Javascript,Jquery,Asp.net Mvc,Timer,我正在尝试创建一个15分钟的计时器,当用户单击按钮“签出”或锁定案例时,它会启动一个计时器,在15分钟内运行一个操作来翻转数据库中的布尔开关,在15分钟后再次解锁该案例。我假设这需要在我的服务器端代码上完成,而不是在Javascript中,因为如果有人离开页面,脚本将无法运行。我希望我能在我的动作方法中插入一些可以做到这一点的东西。我已经研究过了,但还没有找到一个明确的答案。任何帮助都将不胜感激 using (Html.BeginForm("CheckoutCase", "Case"))
using (Html.BeginForm("CheckoutCase", "Case"))
{
@Html.HiddenFor(x => x.ID)
<input type="submit" value="Checkout" name="submitAction" class="btn btn-block alert-success"/>
}
假设
currentCase.locket\u TS
保存DateTime
,通过该日期时间currentCase
被标记为已锁定,并且当一个案例被锁定时,它对所有用户都被锁定,为什么不使用DateTime.Now
和currentCase.locket\r>检查之间的运行时间(以分钟为单位)
如果一个案例被锁定15分钟,它是否对所有用户都被锁定?这是正确的。有一个索引页,用户无法单击该链接访问该详细信息页。感谢您的帮助。我很确定我理解你在这里做什么,但它不喜欢.TotalMinutes'的格式。我查看了MSDN,没有发现任何名称空间或任何遗漏的内容。你知道什么会导致这个错误吗?再次感谢。这是错误1“System.Nullable”不包含“TotalMinutes”的定义,并且找不到接受“System.Nullable”类型的第一个参数的扩展方法“TotalMinutes”(是否缺少using指令或程序集引用?)是currentCase.Lockout\TS
DateTime
还是DateTime?
(可为空?)如果它可为空,则必须传入它的值(currentCase.Lockout\TS.value
)。要验证该值是否为空,您可以首先检查currentCase.Lockout\u TS.HasValue
是否返回true
,如果返回,您可以安全地使用currentCase.Lockout\t.value
[HttpPost]
public ActionResult CheckoutCase(int id)
{
Case currentCase = db.Cases.Find(id);
currentCase.LockCase = true;
currentCase.Lockout_TS = DateTime.Now;
db.SaveChanges();
string url = this.Request.UrlReferrer.AbsolutePath;
return Redirect(url);
}
//if currentCase is locked...
if (currentCase.LockCase)
{
//...check if it's been more than 15 minutes since currentCase was locked
bool shouldUnlock = (DateTime.Now - currentCase.Lockout_TS).TotalMinutes > 15;
//if yes, then unlock it
if (shouldUnlock)
{
currentCase.LockCase = false;
//persist the changes and proceed accordingly
}
//if we've reached this point, shouldUnlock was false _
//which means that currentCase shouldn't be unlocked yet _
//so proceed accordingly
}
else
{
//currentCase is not locked, proceed accordingly
}