MVC计时器动作

时间:2015-10-07 22:01:33

标签: javascript jquery asp.net-mvc timer

我正在尝试创建一个15分钟的计时器,当用户点击“检出”或锁定案例的按钮时,它启动一个计时器,在15分钟内运行一个动作来翻转我的数据库中的布尔开关将在15分钟后再次解锁该案件。我假设这需要在我的服务器端代码上完成,而不是在Javascript中,因为如果一个人离开页面脚本将无法运行。我希望我可以在我的动作方法中插入一些可以做到这一点的方法。我已经研究过了,但是找不到关于如何解决这个问题的明确答案。任何帮助将不胜感激。

 using (Html.BeginForm("CheckoutCase", "Case"))
                {
                    @Html.HiddenFor(x => x.ID)
                    <input type="submit" value="Checkout" name="submitAction" class="btn btn-block alert-success"/>
                }

控制器

[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);

    }

1 个答案:

答案 0 :(得分:2)

假设currentCase.Lockout_TS持有被DateTime标记为已锁定的currentCase,并且当案例被锁定时,它已为所有用户锁定,为什么不检查已过去使用TimeSpan.TotalMinutesDateTime.NowcurrentCase.Lockout_TS之间的时间以分钟为单位?

//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
}