2012-12-19 106 views
2

当我运行代码时,线程过程在response.write之前!!为什么以及如何让他们按顺序?为什么线程在response.write之前出现

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

页面完全执行后会有响应。和asp.net网站作为无状态协议工作 –

+1

你究竟想在这里完成什么?这不会写入页面,等待4秒钟,然后重定向。 HTTP响应不起作用。如果您试图向用户显示消息和新页面,则应该在客户端代码中执行等待/重定向或在第二页上显示消息。 – David

+0

您对客户端/服务器如何在架构上进行交互有一些深刻的误解。在将任何内容发送回客户端浏览器之前,您的代码正在IIS服务器上执行。 – asawyer

回答

0

Web响应将得到在页面上,即你可以请在代码完成后查看响应。因此您的代码正在排除正确的顺序。您可以通过插入Response.End()方法来进行测试,如下所示:

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

响应是Web应用程序中的一次性事物。你不能“回应一点,做一些其他的事情,然后回应一些。”当您考虑类似Response.Redirect()这些修改响应的标头时尤其如此。 (。从本质上讲,Response.Redirect()将完全“揍”你已经添加到响应,使用户将再也看不到它的任何内容)

它看起来像你想在这里做的是:

  1. 向用户显示消息。
  2. 等待几秒钟。
  3. 将用户发送到其他页面。

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

例如,假设你想显示在网页A的消息,等待几秒钟,然后发送用户页面B.然后在第一个,你可能包括这样的事情:

<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 Dialog)和预期的消息,当用户关闭对话框时,它会执行重定向。

相关问题