从代码隐藏文件刷新asp.net页面

时间:2011-10-12 12:35:26

标签: c# asp.net page-refresh

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

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

  

在此上下文中无法获得响应

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

如何从代码隐藏文件中刷新页面,以便在树视图中加载正确的数据?其他建议有效,但使用其他东西而不是刷新页面是值得欢迎的。提前谢谢!

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

2 个答案:

答案 0 :(得分:2)

您无法通过服务器的主动向客户端发送数据。

如果有新数据可用,则必须轮询(jQuery / ajax),然后从客户端刷新。

基本上涉及:

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

[编辑]一些背景知识:

实际上,由于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。

页面实例的使用时间足以处理单个请求。在提供请求后,您无法发出重定向。浏览器将不再监听。

您需要使用上次阅读该文件的日期从您的网页进行投票。如果该文件的上次修改日期已从您记住的更改,则需要刷新页面。