我已将此MVC 5项目设置为在VS2015上使用IIS Express运行。它使用FileSystemWatcher来监视文件夹并相应地填充列表。每隔5秒我检查一次FolderChanged标志的状态。如果是,我想提醒用户并将标志重置为false。我已经验证FileSystemWatcher正常工作,并且正在正确监视该文件夹。但问题是在剃刀视图中看不到FolderChanged标志,但它确实在Do_Something方法中得到更新。我担心我可能会遗漏一些根本简单的东西,但我不知道是什么。任何帮助将不胜感激。
模特课:
public class LogFileParser
{
public List<string> FolderRecords { get; set; }
public bool FolderChanged { get; set; }
private FileSystemWatcher Folder_Watcher;
public LogFileParser()
{
//set up list folder path and filesystemwatcher
Folder_Watcher.Changed += Do_Something();
Folder_Watcher.EnableRaisingEvents = true;
}
private void Do_Something(object sender, FileSystemEventArgs e)
{
//populate FolderRecords list
FolderChanged = true;
}
}
控制器类:
public class DemoController : Controller
{
public ActionResult Test()
{
LogFileParser log_file_parser = new LogFileParser();
return View(log_file_parser);
}
[HttpPost]
public ActionResult Test(LogFileParser log_file_parser)
{
return View(log_file_parser);
}
}
剃刀观点:
@model MonitoringMachineParams.Models.LogFileParser
@{
ViewBag.Title = "Test";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Test</h2>
<script type="text/javascript">
$(document).ready(function () {
window.setInterval(function () { Update(); }, 5000);
});
function Update() {
@if (Model.FolderChanged){
Model.FolderChanged = false;
Html.HiddenFor(m => m.FolderChanged);
<text>alert("hello");</text>
}}
</script>
答案 0 :(得分:-1)
我认为你不明白网络是如何运作的。呈现视图并将其发送到客户端后,它将断开与服务器的连接。除非您向服务器发出AJAX请求,或以其他方式从服务器检索新数据,否则该文件夹可能会整天更改,但客户端将不会知道它。
您的整个设计应该改变。您应该有一个Action,它可以返回一个值,指示文件夹是否已更改,以及客户端代码以检索该数据并对其进行操作。