簡體   English   中英

在處理時更新ASP.NET標簽

[英]Updating ASP.NET label while processing

我有一個方法,那就是在按鈕單擊時運行,帶有4個標簽。 我需要做的是在每個代碼塊執行之后更新標簽。 我試過線程,updatepanels等,似乎無法使任何工作。 我以為計時器可以工作,但是只有當您不在方法內部時,它才會計時。 代碼看起來像這樣:

private void SomeMethod()
{
     label1.text = "Processing...";
     AnotherMethod();
     label1.text = "Done.";
     label2.text = "Processing...";
     AnotherAnotherMethod();
     label2.text = "Done.";

     //etc...
}

您對asp.net的工作方式有誤解。 您的服務器代碼將響應瀏覽器對完整 html頁面的請求而運行。 即使您只想運行一些按鈕單擊代碼,也是如此。 無論如何,即使是回發,也必須從頭開始重建整個頁面 這只是Web表單的設計方式。

頁面呈現到瀏覽器后,頁面類的該實例立即被銷毀 在下一次回發中,您將從頭開始,除了會話,視圖狀態和應用程序緩存的顯着例外。 即使瀏覽器中頁面的先前DOM實例也被替換。

因此,當您設置標簽的text屬性時,您不會直接在瀏覽器中直觀地更新任何內容。 您要做的就是在頁面類中更新一些臨時存儲。 作為執行服務器代碼的最后階段,所有這些臨時變量都用於呈現完整的html,並且最終將響應發送到瀏覽器並顯示給用戶。

那應該是足夠的信息,以使您了解代碼為什么不按預期運行。 在您的任何屬性更改進入瀏覽器之前,它將運行方法中的所有代碼。 因此,用戶唯一看到的就是操作的最終狀態。

現在,ajax可以使事情復雜一些。 使用ajax控件時,您可能不再更新整個頁面,但是該概念仍然適用:發出一個請求,並接收到一個響應並將其用於更新請求的整個上下文。 如果您有很多JavaScript來處理ajax請求的結果,則可以進一步弄亂事情。

不幸的是,您發布的代碼沒有快速解決方案。 您需要考慮一下它是如何工作的,並確定您希望頁面如何流動。

您是否可以將3種方法公開給客戶端腳本,然后從客戶端代碼依次調用它們,當method1完成時,客戶端腳本將更新ui,然后調用method2,依此類推...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM