控制器显示Excel工作表中的数据。 我需要控制器每隔1小时检查一次excel表,还应该更新视图。 这是我的控制器代码:
string path3 = "D:/Project/Sesame Incident Dump_20160317.xls";
Excel.Application application3 = new Excel.Application();
Excel.Workbook workbook3 = application3.Workbooks.Open(path3);
Excel.Worksheet worksheet3 = workbook3.ActiveSheet;
Excel.Range range3 = worksheet3.UsedRange;
List<SesameIncident> ListSesameIncident = new List<SesameIncident>();
for (int row = 2; row <= range3.Rows.Count; row++)
{
SesameIncident S = new SesameIncident();
S.Number = (((Excel.Range)range3.Cells[row, 1]).Text);
S.AssignedTo = (((Excel.Range)range3.Cells[row, 5]).Text);
S.Opened = (((Excel.Range)range3.Cells[row, 6]).Text);
S.Status = (((Excel.Range)range3.Cells[row, 7]).Text);
S.Priority = (((Excel.Range)range3.Cells[row, 10]).Text);
S.AssignedGroup = (((Excel.Range)range3.Cells[row, 12]).Text);
ListSesameIncident.Add(S);
}
ViewBag.ListSesameIncidents = ListSesameIncident
.Where(x => x.Status == "Pending Customer").Take(13);
答案 0 :(得分:3)
您可以向控制器中的Header
添加HttpContext.Response
HttpContext.Response.Headers.Add("refresh", "300; url=" + Url.Action("Index"));
答案 1 :(得分:0)
<script type="text/javascript">
setTimeout(function () {
location.reload();
}, 5 * 60 * 1000);
</script>
参考Refresh Page for interval using js
您可以这样刷新页面
对于控制器,您可能需要在数据库中引用一个表,上次更新时,作为参考,您将不得不永久存储参考数据,这是我的意见,我从未有过这样的要求
答案 2 :(得分:0)
要在没有用户交互的情况下定期运行某些内容(即没有启动它的请求),Web应用程序就不是您想要的。相反,您正在寻找一个Windows服务或者一个简单的控制台应用程序,该应用程序计划由主机系统的调度软件(Windows任务计划程序,cron等)定期运行。见How to execute a method in Asp.net MVC for every 24 hours
我宁愿考虑每次都可以节省读取xls的缓存。见How to cache data in a MVC application
答案 3 :(得分:0)
每隔X秒更新客户端非常简单。只需使用一个
meta
http-equiv
在页面的标题中使用值refresh
。
此解决方案干净且易于阅读,您将不会依赖简单的JavaScript循环。
要每X更新一次Excel工作表,您需要另一个应用程序 计时器。你可以随心所欲,如果你正在使用.net,一个简单的控制台应用程序就可以完成这项工作。如果您使用Azure,则可以使用辅助角色,这正是工作者的角色 是关于; p