2

当我运行代码时,response.write 之前的线程进程!为什么以及如何使它们按顺序排列?

insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
4

3 回答 3

1

响应是 Web 应用程序中的一次性事件。你不能“回应一点,做点别的,再回应一些”。当您考虑Response.Redirect()修改响应标头之类的内容时尤其如此。(基本上,Response.Redirect()将完全“破坏”您添加到响应中的任何内容,以便用户永远不会看到它。)

看起来您在这里尝试做的是:

  1. 向用户显示一条消息。
  2. 等待几秒钟。
  3. 将用户发送到另一个页面。

有几种标准方法可以实现这一点。您可以使用包含步骤 1 的页面进行响应,该页面在客户端代码中执行步骤 2 和 3,或者您可以在服务器端代码中执行步骤 3,然后在第二个页面上执行步骤 1(可能还有两个,隐藏几秒钟后的消息)。

例如,假设您想在页面 A 上显示消息,等待几秒钟,然后将用户发送到页面 B。然后在页面 A 中您可能包含如下内容:

<script type="text/javascript">
    $(function() {
        $('#dialog-message').dialog({
            modal: true,
            buttons: {
                Ok: function() {
                    $(this).dialog('close');
                }
            },
            close: function() {
                window.location.href='Default.aspx';
            }
        });
    });
</script>
<div id="dialog-message">Done successfully ...</div> 

使用 jQuery,它的作用是向用户显示一个带有预期消息的对话框(使用jQuery UI 对话框),当用户关闭对话框时,它会执行重定向。

于 2012-12-19T14:20:03.383 回答
0

您可以在代码中使用客户端功能来完成此操作,请参考以下链接

http://social.msdn.microsoft.com/Forums/da/sharepointdevelopmentprevious/thread/087c6b95-fe8d-48ea-85e6-b7fbcb777a5c

于 2012-12-19T13:53:18.820 回答
0

Web Response只有在webrequest处理完成后才会出现在页面上,即代码执行完成后才能看到响应。所以你的代码执行了正确的顺序。你可以通过insert Response.End()方法测试它,如下所示

insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Response.End();
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
于 2012-12-19T13:59:50.590 回答