【问题标题】:Refresh asp.net page from a code-behind file从代码隐藏文件刷新 asp.net 页面
【发布时间】:2011-10-12 22:14:38
【问题描述】:

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

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

响应在此上下文中不可用

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

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

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

【问题讨论】:

  • 您是否尝试从您的 C# 应用程序执行重定向?
  • 不,来自 asp.net 页面的代码隐藏文件。
  • 上下文是什么?在页面的生命周期内,这是在哪里尝试的?
  • 响应不可用?这很奇怪。您具体在代码隐藏的哪个位置调用它?
  • 在加载页面事件中,我使用 FileSystemWatcher 检查文件是否已更改。在 Changed 事件中,我尝试刷新它。我已经编辑了我的帖子,并提供了一些关于该问题的附加信息。

标签: c# asp.net page-refresh


【解决方案1】:

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

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

这基本上涉及:

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

[编辑]一点背景:

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

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

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

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

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

【讨论】:

  • 客户端是什么意思?网页 (Default.aspx) 而不是代码隐藏文件 (Default.aspx.cs)?我从 asp.net 应用程序而不是我的服务器应用程序调用 Redirect 函数。顺便说一句,我在帖子中添加了一些关于该问题的额外信息。
  • 他的意思是客户端。 Default.aspx = 服务器端。生成的 HTML 被发送到浏览器 = 客户端。因此,您需要将代码(Javascript)发送到定期轮询的 html 页面中。
  • 我认为 Web Forms 是一个漂亮的 Web 框架,但它绝对是学习 Web 的灾难性方式。 @Carlito 请去了解网络是如何工作的。
  • @stilgar:这是微软的方式策略,让大多数开发者有可能快速构建应用程序。让强大的开发人员破解控件的内部 Render 方法:p..... 或等待几年 asp.net mvc 的发布(更强大,但需要更广泛的技能)
  • 你是对的......这两个框架都有位置,每一边都有优点/缺点。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多