2014-04-28 49 views
0

我創建了一個套接字偵聽器,並且當服務器檢測到某個套接字數據時,我需要顯示一個div(保持隱藏狀態,然後使其可見)。
實時更新代碼

我試過使用一個線程,但它不會實時更新UI,只有當頁面被重新加載或者你做了回發。

這裏是我想做的一個例子,在這種情況下,我只想更新帶有代碼隱藏數據的文本框,如果可能的話,我想不使用ajax,javascript或jQuery。背後

代碼:

protected void Page_Load(object sender, EventArgs e) 
     { 
      Thread t = new Thread(TestThread); 
      t.Start(); 
     } 

     private void TestThread() 
     { 
      for (int i = 0; i <= 1000000000; i++) 
      { 
       myTextbox.Text += "1"; 
      } 
     } 


網頁:

<asp:UpdatePanel runat="server" ID="myPanel" > 
    <ContentTemplate> 
     <asp:TextBox runat="server" ID="myTextbox" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

回答

1

對於實時Web功能檢查:

SignalR

在Web環境中,服務器端無法接觸客戶端,除了請求響應場景中,客戶端必須向服務器端發送請求,服務器端處理該請求並回復並回復。

編輯:

SignalR使用最佳的可用技術中,當可用的,如果不是,AJAX長輪詢技術,其中客戶端輪詢(發送請求)發送到服務器的WebSockets,並且服務器回覆僅當特定更改爲觀察到的數據,否則SignalR會嘗試重複播放AJAX請求,一遍又一遍地輪詢服務器,直到服務器回覆觀察數據的變化(最糟糕的情況!)。此外,HTML 5包含網絡套接字,我沒有足夠的信息,但它可能有趣的檢查。

+2

其實據我所知SignalR選擇最佳可用技術,嘗試網絡套接字,長輪詢和重複Ajax請求 – Andrei

+0

@Andrei技術上,當Web套接字不可用時,長輪詢是最佳選擇。感謝指出它選擇了最好的技術,我認爲它只使用長輪詢 –

1

當服務器已經將數據發送到客戶端時,您嘗試執行的操作是在asp.net中從服務器代碼(後面的代碼)更改UI(修改客戶端組件)。

你必須使用客戶端腳本/編碼。

1

據我所知,如果不使用ajax或JavaScript,這是不可能的。
ASP.NET只負責生成從您的Web服務器發送到客戶端的HTML。一旦該HTML在瀏覽器中呈現,更新html的唯一方法就是通過JavaScript。

1

can do a Partial Render in WebForms使用他們的AJAX處理函數,而不必通過在ScriptManager標記中啓用partialRenderingEnabled屬性來編寫jQuery。沒有腳本或AJAX,沒有辦法做到這一點,內容必須回到服務器來運行你的代碼,但至少這樣你不必自己編寫任何JavaScript。

1

在ASP.NET線程會在頁面卸載後立即中止,所以這是不可能的,對不起。

您的方法可能是使用AJAX定期從服務器輪詢狀態。另一方面,服務器會根據數據的變化來回復。

在你的ASP.NET頁面

,添加如下腳本

<head> 
    <script type="text/javascript" language="javascript"> 
    function poll() 
    { 
     var ajax; 
     if(window.XMLHttpRequest) 
      ajax = new XMLHttpRequest(); 
     else 
      ajax = new ActiveXObject("Microsoft.XMLHTTP"); 

     url = "yourPageOrHandler.aspx"; 

     ajax.onreadystatechange = function() 
     { 
      if (ajax.readyState == 4 && ajax.status == 200) 
      { 
      // success 
      var receivedText = ajax.responseText; 
      } 
      else 
      { 
      // error, do the needful 
      } 
     } 

     ajax.open("GET", url, true);   
     ajax.send(); 

     setTimeout("poll()", 1000); //polls every 1 second, you can change the duration here. 
    } 
    </script> 
</head> 
頁面完成

<body> 
    . 
    . 
    . 
    . 
    <script type="text/javascript" language="javascript"> 
    poll(); 
    </script> 
</body> 

之前或者

開始投票,你可以使用ASP.NET AJAX控件,但將與JavaScript AJAX相比更重。


很高興能幫到你!如果您發現它有幫助,請記住接受答案。

1

使用最少的JavaScript,您可以利用服務器發送事件的Simplex數據(從服務器到客戶端)它沒有Websockets的開銷,它在建立連接方面有點成本。但是我不認爲所有的瀏覽器都支持,但有可能是因爲它提供填充工具(庫中沒有原生支持提供功能) 結帳:

http://www.html5rocks.com/en/tutorials/eventsource/basics/