1

我有一个 ASP.NET 网站和一个单独的 C# 应用程序。应用程序将数据写入文件,网站使用文件中的数据填充树视图。我在页面加载事件中填充树视图。

该网站检查文件是否已更改。这发生在文件后面的代码中。如果文件确实发生了变化,则需要刷新网站。我无法使用Response.Redirect,因为我得到了

在这种情况下没有响应

我试过System.Web.HttpContext.Current.Response.Redirect了,但这给了我一个 NullReference。

如何从代码隐藏文件刷新页面,以便在树视图中加载正确的数据?欢迎其他有效但使用除刷新页面之外的其他内容的建议。提前致谢!

编辑:实际问题是动态更新树视图(新数据=更新树视图)。我试图对 MySql 数据库中的数据做一些事情,但失败了。这个想法是一样的,除了数据不是来自文件而是来自数据库。我添加了这个,因为我认为这个信息可以帮助用户理解我的问题。

4

2 回答 2

2

您不能从服务器主动向客户端发送数据。

如果有新数据可用,您将不得不轮询(jQuery/ajax),然后从客户端刷新。

这基本上涉及:

  • 在服务器上
    • 可以判断新数据是否可用的 Web 服务、webmethod 页面方法、自定义处理程序等
  • 在客户端
    • 一个计时器,如果数据被刷新,则查询服务器,在这种情况下,刷新页面,或者如果使用一些 JS 模板,则重建 DOM

[编辑] 一点背景:

实际上,System.Web.HttpContext.Current.Response是 null 因为 Http 协议的异步模型。浏览器发出请求“http://srv/resource”,服务器在端口 80(默认情况下)拦截它,解析请求,构建响应(主要是一堆 html 内容)并将响应发送给浏览器。然后连接关闭。这种选择具有很大的可扩展性,因为它不需要在几乎没有数据传递的情况下保持数千个连接处于活动状态。

这样做的影响是,Web 服务器必须了解客户端,而不是请求中发送的内容。服务器接收文本,并发送文本作为回报。

微软创建了 ASP.Net 框架来重现桌面应用程序的 RAD 感觉。您考虑的是控件和事件,而不是像 ASP 或 PHP 那样生成 html 流。从某种意义上说,他们取得了成功,即构建 Web 应用程序与桌面开发非常相似。

相当实际上是什么让你有些困惑。即使 asp.net 框架封装了大部分管道(viewstate 是关键)来模拟这种行为,asp.net 至少仍然是一个请求文本的解析器,它产生一个 html 文本发送到客户端,在一枪。

所以你必须作弊。正如我所建议的,您可以自动化浏览器(使用 javascript)将这个异步工作包装到“动态”应用程序中。

于 2011-10-12T12:40:51.167 回答
0

您无法从网页中成功使用 FileSystemWatcher。

页面实例的生存时间刚好足以处理单个请求。在该请求得到处理后,您将无法发出重定向。浏览器将不再监听。

您需要使用您上次阅读该文件的日期从您的网页进行轮询。如果该文件的上次修改日期与您记忆中的不同,您将需要刷新页面。

于 2011-10-12T14:14:38.847 回答