Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码隐藏任务获取对div的访问权限_C#_Asp.net_Task_Code Behind - Fatal编程技术网

C# 从代码隐藏任务获取对div的访问权限

C# 从代码隐藏任务获取对div的访问权限,c#,asp.net,task,code-behind,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 v

我需要创建一个应用程序,它应该能够从代码隐藏中操作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>
public分部类\u默认值:System.Web.UI.Page
{
public static System.Web.UI.HtmlControls.HtmlGenericControl elem=null;
受保护的无效页面加载(对象发送方、事件参数e)
{
elem=div1;
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
TaskClass c=新TaskClass();
Task.Factory.StartNew(()=>c.Execute());
}
}
类任务类
{
公共异步任务执行()
{
_Default.elem.InnerHtml=“123”;
}
}

问题是div内容没有改变。如果我尝试在不使用任务的情况下添加一些内容,它会起作用。有没有办法在一个项目中使用aspx和任务?

我担心您想要做的事情比您预期的要复杂得多。网络通过请求和响应进行操作。通常,页面和服务器之间没有固定的连接。一旦你发送了响应,你就不能改变它,这就是为什么你的代码没有改变任何东西。有两种方法可以做你想做的事

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

  • 感谢您的回复,我认为最快的方法是实现websocket(外部库)。我想用另一种方式来解决这个问题,但WebSocket似乎具有难以置信的通用性:)使用Signal而不是原始的Web套接字(当支持时,它可以在Web套接字上工作,API更容易)。此外,如果您可以容忍数据不更新的时间段(如15-20秒),则可以通过轮询轻松完成(即使使用update panel+timer polling而不编写JavaScript)