自动倒计时器来调整数据库记录

Har*_*rry 7 c# database asp.net-mvc-3 visual-web-developer-2010 countdowntimer

我有一个小型的MVC网站,这是一个朋友美发沙龙.在这个页面上,我有一个div,用于显示从数据库记录中获取的数字.这个数字是当前排队等待理发的人数.

我目前的能力是登录"管理"页面并使用表格更新此号码,从"2"到"5",然后将"5"更改为"6",具体取决于有多少人坐在这个队列.

这是目前的手动操作.代码如下:

=============================

调节器

[HttpPost]
        public ActionResult Update(Data data)
        {
            if (ModelState.IsValid)
            {
                data.ID = 1; //EF need to know which row to update in the database. 
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }

            return View(data);
        }
Run Code Online (Sandbox Code Playgroud)

====================================

型号代码

{
    public class Data
    {
        public int ID { get; set; }
        public string Queue_Number { get; set; }
    }

    public class DataDBContext : DbContext
    {
        public DbSet<Data>Queue { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我真正想要的是,一旦你从"管理"页面上的表单手动更新了队列号,我想自动倒计时20分钟(理发所需的大致时间),然后有队列号自动调整为1,直到达到"0".

例如我们队列中有5个人,20分钟后自动调整为4个人,网页会自动更新/刷新,然后又有2个人进入,所以我们手动将其调整为队列中的6个人并启动计时器再次,每20分钟通过队列调整-1直到它下降到"0".一旦它变为"0",它就会一直停留在那里,直到我们手动将更多人添加到队列中.

我恐怕我不知道如何开始这样的请求,或者即使有可能?

我非常感谢这里的专家提供的任何帮助,这些帮助可以为我"babystep".我没有提供的任何信息我会努力补充 - 我意识到我不是最好解释自己:-(

CR4*_*G14 7

你考虑过Ajax吗?你在手动设置标志时存储最后更新的时间吗?您可以使用Ajax请求同时使用jquery Set interval运行.这将每2分钟触发一次ajax请求.查找最后一次更新,如果超过20分钟,然后从数据库中删除一个,您的返回将是新号码,jquery可以为您更新该号码.

实际上相当简单的过程,但需要更多关于底层数据的细节.

以下是我可以从您的问题中看到它的方法

在控制器中

public ActionResult ajaxUpdate()
        {
            //open connection
            dbcontext db = new dbcontext();
            db.Connection.Open();

            // get the last updated record in the database.
            var entry = db.Entry.OrderByDecending(m=> m.LastUpdatedDate).FirstOrDefault();

            //clean up
            db.Connection.Close();
            db.Dispose();

            //return -1 as error
            if(entry == null){

                return Json(-1,JsonRequestBehavior.AllowGet);

            }

            // get current number of people in queue
            Int32 numberOfPeople = entry.QueueNumber;

            TimeSpan span = DateTime.Now.Subtract(entry.LastUpdatedDate);

            if(span.Minutes >= 20){

                // if 20 mins have passed assume a person has been completed since manual update
                numberOfPeople--;

            }

            //this returns a number, alternatively you can return a Partial
            return Json(numberOfPeople, JsonRequestBehavior.AllowGet);
        }
Run Code Online (Sandbox Code Playgroud)

Jquery和Ajax

$(document).ready(function () {

    // run function every x minutes
    setInterval(function () {
        UpdateQueue();
    }, 100000);





});
    function UpdateQueue() {

    $.ajax({
        cache: true,
        type: 'POST',
        url: "/ControllerName/ajaxUpdate",
        async: false,
        dataType: "json",
        success: function (result) {
            // on success result will be the number returned

            // -1 is error
            if (result == -1) {
                return;

            }

            // check the -- didn't return a negative
            if (result < 0) {

                result = 0;

            }

            //find your element in the HTML to update
            $('#NumberElement').text().replaceWith(result);


        }

    });


}
Run Code Online (Sandbox Code Playgroud)

在包含此代码之前,必须确保包含jquery库,否则将无法定义Jquery.

  • @Harry看看存储时间然后使用jquery和Ajax更新数字而不需要任何刷新.有很多关于Ajax和代码示例的文档.我会更新答案让你前进. (2认同)