我有一个需要由公司代表执行的操作列表,如果它正在编辑 X 分钟,我想打开一个计时器。并且所有 10 分钟我都喜欢刷新页面。
问题是许多公司代理可以访问和编辑这些操作。所以我喜欢在我的视图中为项目着色,但如果代理在这 X 分钟内“睡觉” - underProcess 字段重置为 false;
因此,我首先向我的模型添加一个字段,该字段告诉我此操作是“UnderProcess”(我喜欢 CodeFirst :) 我向 ViewModel 添加了一个静态字典,在编辑时我得到了 tare 并添加了一行带有 kay-actionID 和编辑的日期时间。之后,在我对 foreach 的看法中,如果 item.UnderProcess 样式 = 颜色:红色 .. 编辑后的课程我从字典中删除并更改布尔标志。
但这不起作用 - 在这 X 分钟后它保持红色,我认为问题出在这个静态字典上,因为当我调试时它总是空的。
野兔我的 ViewModel:
public class AgentActionViewModel
{
public SupplierAction Action { get; set; }
public List<SupplierAction> Actions { get; set; }//= new List<SupplierAction>();
public static Dictionary<int, DateTime> UnderProcessFrom;
public static AgentActionViewModel()
{
UnderProcessFrom = new Dictionary<int, DateTime>();
}
}
控制器:
指数
[SupplierAuthorization]
public ActionResult AgentAction(..)
{
Response.AddHeader("Refresh", (MINUTES*60).ToString());
List<SupplierAction> actions = db.SupplierActions.ToList();
bool flag = false;
var collection = AgentActionViewModel.UnderProcessFrom.Keys;
foreach (var aId in collection)
{
if (AgentActionViewModel.UnderProcessFrom[aId].AddMinutes(MINUTES) <= DateTime.Now)
{
AgentActionViewModel.UnderProcessFrom.Remove(aId);
var action = actions.Find(a=>a.SupplierActionID == aId);
action.UnderProcess = false;
db.Entry(action).State = EntityState.Modified;
}
}
if(flag)
db.SaveChanges();
...
var vm = new AgentActionViewModel();
vm.Actions = actions.OrderByDescending(d => d.RequestDate).ToList();
return View(vm);
}
获取编辑:
[SupplierAuthorization]
public ActionResult Edit(int id = -1)
{
try
{
...
if (!a.UnderProcess)
{
a.UnderProcess = true;
db.Entry(a).State = EntityState.Modified;
db.SaveChanges();
AgentActionViewModel.UnderProcessFrom.Add(id, DateTime.Now);
}
...
}
catch (Exception ex)
{
....
if (a.UnderProcess)
{
a.UnderProcess = false;
db.Entry(a).State = EntityState.Modified;
db.SaveChanges();
AgentActionViewModel.UnderProcessFrom.Remove(id);
}
.....
}
...
}
帖子编辑:
.....
if (vm.Action.UnderProcess)
{
vm.Action.UnderProcess = false;
AgentActionViewModel.UnderProcessFrom.Remove(vm.ActionID);
}
.....
我的观点 :
@model oCc.IPToGo.ViewModel.AgentActionViewModel
....
<tbody>
@foreach (var item in Model.Actions)
{
<tr style="@(item.UnderProcess ? "color:red" : "")">
<td>
.....
10 倍对不起我的英语不好 =)