2010-08-24 74 views
0

我试图在ASP.NET中首次实现重定向后。假设我的业务对象可能需要几秒钟到几分钟才能完成,按什么顺序以及使用什么语法?如何通过“POST后重定向”模式使用ASP.NET? [编辑]

例如:

  1. 网友发帖的

  2. 服务器发出的Server.Transfer或Response.Redirect的

  3. 服务器做一些事情,需要一两角分钟的Thread.Sleep

处理这种情况的最佳方法是什么?

+0

您是否希望用户知道他提交的结果,以防失败? – Holystream 2010-08-24 16:42:05

+0

可能的重复[Server.Transfer Vs. Response.Redirect](http://stackoverflow.com/questions/224569/server-transfer-vs-response-redirect) – 2010-08-24 16:42:28

+0

@Nathan泰勒:不是重复的......虽然这是有帮助的,但似乎我需要响应。重定向在“重定向后”模式,但我不确定步骤?我应该不是将#2与#3颠倒过来?我只是假设这是正确的序列 – LamonteCristo 2010-08-24 17:20:03

回答

2

在这种情况下,最好是坚持使用Response.Redirect(),以便用户的客户端发出重定向,而不是Server.Transfer(),它执行纯服务器端重定向到不同的上下文。

关于需要用户等待的过程,您可能希望使用某种异步实现,其中耗时的操作放在后台线程中;与此同时,用户不是在空白的加载屏幕上等待,而是将Response.Redirect()给予“处理”页面,轮询服务器以完成当前操作并更新用户。要增加波兰语,请考虑实施类似Facebook的图片上传工具,在用户继续正常使用网站的同时,在屏幕的角落放置进度条。

+0

你有关于如何添加波兰语的提示吗? JavaScript只是轮询一个WCF服务(或等价)? – LamonteCristo 2010-08-24 17:46:01

+1

确切地说,服务器会有某种Web方法,用于检索当前正在执行的进程的进度并将其返回给JavaScript。从那里JavaScript会简单地更新其进度栏。您可以使用JavaScript setInterval()指示客户端每隔几秒轮询一次服务器以获取当前进度。对另一个问题的这个答案有一个[如何用JavaScript实现轮询过程]的例子(http://stackoverflow.com/questions/3526955/displaying-post-data-with-jquery/3527018#3527018)。 – 2010-08-24 17:54:10

+0

最后,在重定向之后放置bizlogic以避免双重提交会有意义吗?似乎有可能发生...... – LamonteCristo 2010-08-24 20:21:46

1

从我所看到的,你需要做的:

  1. 用户张贴形成以服务器脚本
  2. 服务器做一些事情,需要使用的Thread.Sleep
  3. 服务器发出响应一两分钟。重定向

但是,这里显而易见的缺点是用户在服务器做某些工作时一直在等待(两分钟是很长的延迟时间,他们可能会认为某事出错了),并且可能你可能会在浏览器上发出HTTP请求超时。

在代码方面,这是非常简单的:

  1. 这是一个标准<FORM METHOD="POST">
  2. 什么就做什么,你需要做的,不能看,你为什么会在此刻需要的Thread.Sleep;您不想在服务器端处理完成后立即重定向?
  3. 呼叫Response.Redirect("mypage.aspx")执行GET

这是否帮助?

+0

Huggil Thread.Sleep只是模拟后端进程,需要一些时间才能完成.. – LamonteCristo 2010-08-24 17:43:36

+0

是的,谢谢...似乎BizLogic总是在重定向之前运行在任何情况下。 – LamonteCristo 2010-08-24 17:51:10