2015-07-03 4 views
0

У меня есть цикл foreach, запущенный в проекте C# asp.net, который выполняется на стороне сервера.Асинхронный вывод в текстовое поле в asp.net

После завершения каждой итерации цикла я хотел бы обновить текстовое поле (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 + ","; 
      } 
     } 
Смежные вопросы