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。示例代碼