首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET 4.0 Webforms -异步更新3面板

ASP.NET 4.0 Webforms -异步更新3面板
EN

Stack Overflow用户
提问于 2012-12-06 23:32:50
回答 1查看 502关注 0票数 0

我认为这是错误的方式,我知道页面呈现,并被发送到客户端(网页浏览器)。但我真的需要明白这一点。

问题如何异步更新我的三个更新文件?为了模拟这种情况,我创建了一个for循环,在找到正确的数字并触发事件之后,每次增加一秒钟。所以,我想要做的是,当这些更新完成后,能够在浏览器中看到。时间跨度如下:

时间

0,0235(只是一个数字,以表明它真的发生得很快)

页面上发生了什么?第一个标签几乎立即更新了编号7 TIME

0,0235 +1秒= 1,0235 页面上发生了什么?几乎立即用8 TIME更新了第二个标签

0,0235 +1秒= 2,0235 页面上发生了什么?几乎立即用数字9更新了第三个标签

我已经浏览了一些页面,这些页面首先给您显示了一些文本,几秒钟后,它们就给您显示了一个图表,当该请求完成加载时?所以一定有严格的方法吗?

下面是我的代码,我不会发布我的CounterEventArgs类--它可以工作,不会影响问题。

这里是我的index.aspx代码背后的公共部分类_Default : System.Web.UI.Page {私有testClass _testet;

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    ScriptManager1.RegisterAsyncPostBackControl(Button1);  
}
void _testet_CounterFoundNumber(object sender, CounterEventArgs e)
{
    switch (e.labelnumber)
    {
        case 1:
            Label1.Text = e.positionen.ToString();            
            break;
        case 2:
            Label2.Text = e.positionen.ToString();        
            break;
        case 3:
            Label3.Text = e.positionen.ToString();        
            break;
    } 
}
protected void Button1_Click(object sender, EventArgs e)
{
    testClass testet = new testClass();
    _testet = testet;
    _testet.CounterFoundNumber += new testClass.CounterEventArgsHandler(_testet_CounterFoundNumber);
    _testet.count();
}
}

和来源

代码语言:javascript
复制
  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Async="true"%>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
<title></title>
</head>
<body>
  <form id="form1" runat="server">
  <div>  
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="updatepanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</ContentTemplate>
</asp:UpdatePanel>

 <asp:UpdatePanel ID="updatepanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
  <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</form>
</ContentTemplate>
</asp:UpdatePanel>
 <asp:UpdatePanel ID="updatepanel3" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>

最后是我的测试课

代码语言:javascript
复制
public class testClass
{
public event CounterEventArgsHandler CounterFoundNumber; 
public delegate void CounterEventArgsHandler(object sender, CounterEventArgs e);
public int y = 1;

    protected virtual void OnCounterFoundNumber(CounterEventArgs e)
    {
        if (CounterFoundNumber != null)
        CounterFoundNumber.BeginInvoke(this, e, new AsyncCallback(this.ResultFoundNumber), null);
    }

    public void count()
    {          
        for (int i = 0; i < 10; i++)
        {
            if (i >= 7)
            {    
               OnCounterFoundNumber(new CounterEventArgs(i,y));
               y++;
               System.Threading.Thread.Sleep(1000);
            }              
        }
    }
    public void ResultFoundNumber(IAsyncResult ar)
    {
        CounterFoundNumber.EndInvoke(ar);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 05:13:20

不要在后面编写代码,而是使用Javascript setInterval method()

在JavaScript函数中,触发某些按钮,单击为您执行部分postpack的事件并更新面板。

如果需要,可以通过设置css属性disply:none使按钮不可见。

或者,如果使用HTML5,请检查实现COMET in ASP.NetWebSockets实现。

希望这能帮到你!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13754553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档