2012-01-05 89 views
7

当我使用__doPostBack开始回发时,会创建一个文件并返回给用户以在HttpContext.Current.Response中进行下载。如何停止刷新客户页面的回发

因为我改变Response,包括它的JavaScript值的页面不被修改

但是,当我没有文件输出时,页面被刷新(因为回传的),并在页面上的JavaScript修改是丢失。

我该如何'停止'回传继续并坚持我目前的页面?我无法使用异步回发,因为我需要回发让用户下载文件。

编辑:在评论一些问题后更多信息:

  • 该文件要求在web服务请求。 webservice需要 执行大量查询以确定是否创建文件。 I 宁愿这只发生一次。
  • 用户可以拖放一些将在文件 请求中使用的过滤器。如果没有文件可用,用户应该能够更改他的过滤器,这就是为什么该页面不应该改变。
+1

第一个是在我脑海中的(未测试):使用隐藏的按钮为[PostbackTrigger](http://msdn.microsoft .com/en-us/library/system.web.ui.postbacktrigger.aspx)。在您创建文件的serverside处理程序中(或者不是)到目前为止,如果您有文件,请注册javascript以单击此按钮。处理此事件并传递文件。如果没有文件,请不要注册脚本。 – 2012-01-05 16:03:51

+0

它会工作,但我的问题是,该文件是从web服务请求。我不知道在请求完成之前是否会有文件。通过您的解决方案,该文件将被创建两次。这是一个沉重的要求,可能需要一些时间,所以我宁愿不这样做两次。 – 2012-01-05 16:11:58

+1

为什么您需要创建该文件以确定它是否存在?这听起来很奇怪。我会添加一个方法到你的web服务中,它会在不创建的情况下进行检查。 – 2012-01-05 16:14:55

回答

7

从W3标准和RFC 2616:

10.2.5 204无内容服务器已经履行了请求,但不需要返回一个实体主体,并且可能要返回更新 元信息。响应可以包含新的或更新的实体标题形式的元信息,如果存在的话应该与请求的变体相关联。
如果客户端是用户代理,它不应该从导致请求被发送的文档视图中更改它的文档视图。该响应是 主要是为了允许输入动作来发生,而不 引起变化到用户代理的活动文档视图,虽然 任何新的或更新的元信息应在用户代理的活动视图被应用到文档 目前。 204响应不能包含一个消息体,因此总是以第一个 空行结束。

请注意粗体线在这里。我没有自己尝试过;但是,将HTTP状态设置为204并发回空文档,而不是试图完全停止回发,这当然值得一试。

祝你好运,我希望这会有所帮助。

编辑:这是做的伎俩代码:
System.Web.HttpContext.Current.Response.StatusCode = 204;

+0

令人惊叹的..很棒的作品!完全没有任何解决方法的我的问题的答案 – 2012-01-09 08:29:09

+0

HTTP状态代码以拯救!太好了! – 2012-01-11 08:28:22