2015-07-03 77 views
0

我有一個foreach循環在C#asp.net項目運行的是在服務器端運行。異步輸出到文本框在asp.net

循環的每次迭代完成後我想更新客戶端Web瀏覽器的文本框(consolebox.text),使用戶可以看到一個循環完成。

功能完成後,使用戶不會看到進度輸出,直到整個的foreach完成它只更新文本框。以下是我的代碼,我試過ajax updatepanels無效

protected void Button1_Click(object sender, EventArgs e) 
    { 

     consolebox.Text = "Please Wait........"+ Environment.NewLine; 


      foreach (var listBoxItem in serverlist.Items) 
       { 
        string send = listBoxItem.ToString(); 
        DELETEPROFILE(send); 
        consolebox.Text += ("" + send + "........Complete" + Environment.NewLine); 

       } 


    } 
+1

我認爲最簡單的方法是通過JavaScript更新文本框調用服務器端的前 –

回答

0

你可以通過網絡服務來做到這一點。使用ajax開始運行和其他服務來閱讀功能。

樣品:

.aspx的

<script type = "text/javascript"> 
     function ajaxCall(fsMathod) { 
      $.ajax({ 
       type: "POST", 
       url: "Test.aspx/" + fsMathod, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: OnSuccess, 
       failure: function (response) { 
        alert(response.d); 
       } 
      }); 
     } 
     function OnSuccess(response) { 
      alert(response.d); 
      var TheTextBox = document.getElementById("<%=consolebox.ClientID%>"); 
      TheTextBox.value = TheTextBox.value + response.d; 
     } 
    </script> 
    <body> 
    <form id="form1" runat="server"> 
    <div style="margin:0 auto; width:20%"> 
     Textbox: <asp:TextBox ID="consolebox" TextMode="MultiLine" runat="server"></asp:TextBox> 
     <br /> 

     <input id="btnStartAsync" type="button" value="Start Async" onclick = "ajaxCall('startAsync');" /> 
     <input id="btnReadAsync" type="button" value="Read Async" onclick = "ajaxCall('readAsync')" /> 

    </div> 

    </form> 
</body> 

C#

static string CompletedItems = ""; 
[System.Web.Services.WebMethod] 
     public static string readAsync() 
     { 
      return "" + CompletedItems + "........Complete\n"; 
     } 

     [System.Web.Services.WebMethod] 
     public static void startAsync() 
     { 
      asyncTask(); 
     } 

     private static void asyncTask() 
     { 
      foreach (var listBoxItem in serverlist.Items) 
      { 
       string send = listBoxItem.ToString(); 
       DELETEPROFILE(send); 
       //consolebox.Text += ("" + send + "........Complete" + Environment.NewLine); 
       CompletedItems += send + ","; 
      } 
     }