从任务后面的代码访问div

时间:2014-08-24 08:53:11

标签: c# asp.net task code-behind

我需要创建一个应该能够从后面的代码中操作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 个答案:

答案 0 :(得分:0)

我担心你想要做的事情比你想象的要复杂得多。网络通过请求和响应进行操作。通常,页面和服务器之间没有持续的连接。发送响应后,您无法更改它,这就是您的代码不会更改任何内容的原因。有两种方法可以做你想做的事。

  1. 轮询 - 您编写JavaScript或使用服务器端控件(例如带有计时器的UpdatePanel),它定期从服务器获取任务的最新状态并更新UI。使用这种方法时,您应该小心,因为过于频繁地提出请求会导致移动设备出现性能问题甚至数据使用问题。另一方面,如果您提出的请求不够频繁,您的通知将无法按时显示,并且在UI中显示完整任务之前可能会有很长一段时间。
  2. 使用持久连接。目前,有一些方法可以与页面建立持久连接。可悲的是,它们与普通网页的工作方式完全不同。因此,您无法在页面代码中执行此操作。您应该查看一些有关SignalR等框架的教程。实现起来并不是很难,但它与页面通信的服务和方式完全不同。基本上,您不会像编写单独的服务那样更改页面。