为什么我的FileSystemWatcher标志没有在我的剃刀视图中更新

时间:2016-01-27 08:57:21

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

我已将此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>

1 个答案:

答案 0 :(得分:-1)

我认为你不明白网络是如何运作的。呈现视图并将其发送到客户端后,它将断开与服务器的连接。除非您向服务器发出AJAX请求,或以其他方式从服务器检索新数据,否则该文件夹可能会整天更改,但客户端将不会知道它。

您的整个设计应该改变。您应该有一个Action,它可以返回一个值,指示文件夹是否已更改,以及客户端代码以检索该数据并对其进行操作。