我有一个ASP.NET网站和一个单独的C#应用程序。应用程序将数据写入文件,网站使用文件中的数据填充树视图。我在页面加载事件中填充树视图。
网站会检查文件是否已更改。这是从代码隐藏文件发生的。如果文件确实发生了变化,则需要刷新网站。我无法使用Response.Redirect
因为我得到了
在此上下文中无法获得响应
我尝试了System.Web.HttpContext.Current.Response.Redirect
,但这给了我一个NullReference。
如何从代码隐藏文件中刷新页面,以便在树视图中加载正确的数据?其他建议有效,但使用其他东西而不是刷新页面是值得欢迎的。提前谢谢!
编辑:实际问题是动态更新树视图(新数据=更新的树视图)。我试图对MySql数据库中的数据执行某些操作但失败了。这个想法是一样的,除了数据不是来自文件而是来自数据库。我添加了这个,因为我认为这些信息可以帮助用户理解我的问题。
答案 0 :(得分:2)
您无法通过服务器的主动向客户端发送数据。
如果有新数据可用,则必须轮询(jQuery / ajax),然后从客户端刷新。
基本上涉及:
[编辑]一些背景知识:
实际上,由于Http协议的异步模型,System.Web.HttpContext.Current.Response
为空。浏览器发出请求“http:// srv / resource”,服务器在端口80上拦截它(默认情况下),解析请求,构建响应(主要是一堆html内容)并将响应发送到浏览器。然后关闭连接。这种选择允许很好的可扩展性,因为它不需要保持数千个连接存活,几乎没有数据传递它。
这样做的影响是,Web服务器必须了解客户端,而不是请求中发送的内容。服务器接收文本,并发送文本作为回报。
Microsoft已经创建了ASP.Net框架,以重现RAD对桌面应用程序的感觉。你认为控件和事件,而不是像ASP或PHP那样生成HTML流程。从某种意义上说,他们成功构建了与桌面开发相似的 完全 。
相当 实际上是让您感到困惑的原因。即使asp.net框架封装了大部分管道(viewstate是关键)来模拟这种行为,asp.net至少仍然是请求文本的解析器,它生成一个html文本发送给客户端,一枪。
所以你必须作弊。正如我所建议的那样,您可以自动化浏览器(使用javascript)将此异步工作包装到“动态”应用程序中。
答案 1 :(得分:0)
您无法在网页中成功使用FileSystemWatcher。
页面实例的使用时间足以处理单个请求。在提供请求后,您无法发出重定向。浏览器将不再监听。
您需要使用上次阅读该文件的日期从您的网页进行投票。如果该文件的上次修改日期已从您记住的更改,则需要刷新页面。