使用Response.Write实现在页面的生命周期中前后台的交互

  Response.Write()方法非常的常见,也很普通,就是向http output中输出一string。其输出的内容位于页面的最顶端,常用来实现显示一些页面消息框等逻辑。

 

  一般来说,在页面的整个生命周期过程中通过Response.Write输出的内容都会在最后随页面的文档流输出到Client端。但借助于Response.Flush,便可实现过程中前后台的动态交互。

 

  Response.Flush方法,强制将缓冲区中的内容输出到Client端,而无需等到生命周期的结束。通过一个例子加深理解,该实例实时的反应后台方法执行的进度。

  每次后台试图update client progress的时候,均会由Response.Write输出一段js脚本,通过js来更新进度值。

for (int i = 1; i <= 100; i++)
{
    Thread.Sleep(500);
    setProcessValue(i);
}

 

private void setProcessValue(int percent)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<script>setProcessBarValue('" + percent + "')</script>");

    HttpContext.Current.Response.Write(sb.ToString());
    HttpContext.Current.Response.Flush();
}

  

  运行代码,会看到progress value是随着方法的执行逐次的向上递增。Response.Flush的调用,保证了每次执行的时候都会及时的将内容输出到Client端。

 

  去掉代码中所有的Response.Flush,运行代码。结果发生变化,progress value只在页面加载完全后一次性的从0变成了100。示例代码

 

 

  

posted on 2014-12-12 23:45  iSun  阅读(7386)  评论(0编辑  收藏  举报