簡體   English   中英

從任務背后的代碼訪問div

[英]Get access to div from code behind task

我需要創建一個應用程序,該應用程序應該能夠從后面的代碼中操作div內容。 但是我需要在不重新加載頁面的情況下更新此div。 我使用的功能基於任務。 我只是從這項技術開始。 這是我的代碼:

    public partial class _Default : System.Web.UI.Page
    {
        public static System.Web.UI.HtmlControls.HtmlGenericControl elem = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            elem  = div1;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            TaskClass c = new TaskClass ();
            Task.Factory.StartNew(() => c.Execute());
        }
    }

    class TaskClass 
    {
        public async Task Execute()
        {
            _Default.elem.InnerHtml = "123";
        }
    }

    <%@ Page Language="C#" AutoEventWireup="true" Async="true" CodeBehind="Page.aspx.cs" Inherits="Class1._Default" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form runat="server">
            <div id="div1" style="border:1px solid; width:800px; height:200px;overflow:auto;" runat="server"></div>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </form>
    </body>
    </html>

問題在於div的內容沒有改變。 如果我嘗試在不使用任務的情況下添加一些內容,它將起作用。 有沒有一種方法可以在一個項目中使用aspx和任務?

恐怕您想要做的事情比您預期的要復雜得多。 網絡通過請求和響應進行操作。 通常,頁面與服務器之間沒有恆定的連接。 發送響應后,您將無法更改它,這就是代碼未更改任何內容的原因。 有兩種方法可以做您想要的。

  1. 輪詢-您編寫JavaScript或使用服務器端控件(例如帶有計時器的UpdatePanel),這些控件會定期從服務器獲取任務的最新狀態並更新UI。 使用這種方法時,您應該小心,因為過於頻繁地發出請求將是性能問題,甚至是移動設備上的數據使用問題。 另一方面,如果您發出請求的頻率不夠高,則通知將無法按時顯示,並且可能需要很長時間才能將完整的任務顯示在UI中。
  2. 使用持久連接。 這些天來,有一些方法可以持久地連接到頁面。 遺憾的是,它們的工作方式與普通網頁的工作方式截然不同。 因此,您不能在頁面代碼中執行此操作。 您應該查看有關SignalR之類的框架的一些教程。 實現起來不是很困難,但是它是與頁面通信的完全不同的服務和方式。 基本上,您不會像編寫單獨的服務那樣更改頁面。

暫無
暫無

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

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