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".我没有提供的任何信息我会努力补充 - 我意识到我不是最好解释自己:-(
你考虑过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.