2012-10-04 81 views
0

我想從服務器端更新客戶端的標籤,同時該功能仍在服務器端執行。我怎樣才能做到這一點?ASP.NET:如何從服務器端更新客戶端?

下面的代碼片段:

protected void Button1_Click(object sender, EventArgs e) 
     { 
      string Result = "Success"; 
      if (Result == "Success") 
      { 
       Label1.Text = "Plan mst Completed"; 
       Thread.Sleep(2000);  //Some functionality here 
       Label1.Text = "Packing date mst Started"; 
      } 
      if (Result == "Success") 
      { 
       Label1.Text = "Packing date mst Completed"; 
       Thread.Sleep(2000);  //Some functionality here 
       Label1.Text = "Etd mst Started"; 
      } 

      if (Result == "Success") 
      { 

       Label1.Text = "Etd mst Completed"; 
       Thread.Sleep(2000);  //Some functionality here 
       Label1.Text = "Inner box mst Started"; 

      } 
     } 

我想在label1.text所有改變在客戶端反映,而功能仍在執行。 請幫忙!!!

+0

您可以對每個操作使用不同的方法。然後你可以更新第一個標籤並執行一個javascript函數立即回發到服務器。因此,你可以點擊()一個隱藏的按鈕,並在服務器端處理它的點擊事件,以執行下一個動作,等等。 –

+0

@Tim:呃,我無法承受我的情況下的Page_reload,所以隱藏的按鈕是沒有問題的。 在這種情況下AJAX有幫助嗎? –

+0

最簡單的方法可能是使用ajax請求輪詢服務器。在這種情況下,您必須將服務器端操作的狀態保存在某個服務/ PageMethod可以訪問的地方。 – PHeiberg

回答

0

你是怎麼從瀏覽器調用這個函數的。它是一個異步調用,那麼你可以在客戶端自己管理它。如果它是一個同步的,那麼它將不可能,因爲你對你的請求的迴應仍然未決。

使用與前端從該方法內部此 Jquery Ajax post animation during ajax process?

+0

下面是詳細的問題: http://stackoverflow.com/questions/12720666/asp-net-ajax-updatepanel-issue –

+0

我的理解經過你的問題。一些如何顯示執行進度直到完成時間。爲此,您可以使用http://api.jquery.com/jQuery.ajax/調用,並在它到達服務器端之前更新您的標籤,甚至可以使用帶有圖標的覆蓋圖覆蓋頁面,並且一旦您的請求成功處理程序隱藏覆蓋層或再次更新您的標籤。 – ankur

+0

使用此爲您的參考http://stackoverflow.com/questions/9691648/delaying-the-loading-spinner-while-doing-ajax-requests-in-jquery http://stackoverflow.com/questions/12108937/jquery -ajax-後動畫中的Ajax處理 – ankur

1

的直接通信將是困難的。這是我該怎麼做的。

1)將「計劃mst」,「裝箱日期mst」,「Etd mst」和「內箱mst」拆分爲4個獨立的功能。

2)讓頁面上的按鈕點擊事件觸發JavaScript函數,通過AJAX一個接一個地擊中4個方法中的每一個。爲每個功能組成一個新的ASPX頁面(「InnerBox.aspx」等)。如果您有jQuery的,它會是這個樣子:

 $("#SubmitButton").click(function() { 
      DoPlanMst(); 
     }); 

     function DoPlanMst(argumentObj) { 
      SetLabel("Plan MST Started"); 
      $.ajax({ 
       url: "PlanMst.aspx", 
       type: "POST", 
       data: argumentObj, // your post params 
       success: function() { 
        SetLabel("Plan MST Completed"); 
        DoPackingDateMst(); 
       } 
      }); 
     } 


     function DoPackingDateMst(argumentObj) { 
      SetLabel("Packing Date MST Started"); 
      $.ajax({ 
       url: "PackingDate.aspx", 
       type: "POST", 
       data: argumentObj, // your post params 
       success: function() { 
        SetLabel("Packing Date MST Completed"); 
        DoEtdMst(); 
       } 
      }); 
     } 

     function DoEtdMst(argumentObj) { 
      SetLabel("ETD MST Started"); 
      $.ajax({ 
       url: "EtdMst.aspx", 
       type: "POST", 
       data: argumentObj, // your post params 
       success: function() { 
        SetLabel("ETD MST Completed"); 
        DoInnerBoxMst(); 
       } 
      }); 
     } 

     function DoInnerBoxMst(argumentObj) { 
      SetLabel("Inner Box MST Started"); 
      $.ajax({ 
       url: "InnerBoxMst.aspx", 
       type: "POST", 
       data: argumentObj, // your post params 
       success: function() { 
        SetLabel("Inner Box MST Completed"); 
       } 
      }); 
     } 

     function SetLabel(message) { 
      $("#Label1").val(message); 
     } 

如果你不希望9月4日ASPX頁面,這很好。您可以將它們放入一個名爲「ProcessMSTs.aspx」的單個文件中,該文件查找查詢字符串param以確定其代碼中調用的方法,同時仍然傳入POST參數。 編輯:修正了AJAX調用成功函數中的函數名稱中的拼寫錯誤。

相關問題