找不到与ASP计时器滴答事件ASP中继子控件 [英] Unable to find ASP Repeater child control from ASP Timer tick event

查看:127
本文介绍了找不到与ASP计时器滴答事件ASP中继子控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查看图片如下:

场景

我有一个的转发控制轴承内径 RPT1 ,里面的ItemTemplate中,其中我有一个控制范围 ID为< STRONG>农行,这是目前显示的数字。我也有一个股票格式DD-MM-YYYY HH中继上述:MM:SS(27-05-2013 11时24分36秒),由ASP:定时器和ASP:UpdatePanel的

I have a repeater control bearing Id "rpt1" ,inside the ItemTemplate of which I have a span control whose Id is "abc", which is currently displaying a number. I also have a ticker above the repeater in format dd-MM-yyyy hh:mm:ss (27-05-2013 11:24:36), made up of ASP:Timer and ASP:UpdatePanel.

要求

我需要的是,每当定时器我的第二部分达到00,我想从数字的变化幅度的内容,一些图像。

What i need is that whenever my second part of the timer reaches 00, I would like to change the content of span from number to some image.

code

ASPX:

 <form id="form1" runat="server">
    <asp:ScriptManager ID="scr" runat="server">
    </asp:ScriptManager>
    <asp:Timer ID="timer" runat="server" Interval="1000" OnTick="timer_Tick">
    </asp:Timer>
    <asp:UpdatePanel runat="server" ID="up1" UpdateMode="Always">
        <ContentTemplate>
            <asp:Label runat="server" ID="lblNum"></asp:Label>
        </ContentTemplate>
        <Triggers>
        <asp:AsyncPostBackTrigger ControlID="timer" EventName="Tick" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Repeater runat="server" ID="rpt1">
        <ItemTemplate>
            <table>
                <tr>
                    <td>
                        <span id="abc" runat="server">
                            <%#Eval("Number") %></span>
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:Repeater>
    </form>

CS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Threading;

namespace WebTest
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindList();
        }

        protected void timer_Tick(object sender, EventArgs e)
        {
            lblNum.Text = string.Format("{0:dd:MM:yyyy hh:mm:ss}",DateTime.Now);

            if (DateTime.Now.Second == 30)
            {
                Thread t = new Thread(DisplayImages);
                t.Start();
                t.Suspend();
                t.Join();

            }
        }

        private void BindList()
        {
            var list = new List<Numbers>();
            list.Add(new Numbers() { Number = 5 });
            list.Add(new Numbers() { Number = 6 });
            list.Add(new Numbers() { Number = 7 });
             list.Add( new Numbers() { Number = 5 });
             list.Add(new Numbers() { Number = 5 });

            rpt1.DataSource = list;
            rpt1.DataBind();
        }

        private void DisplayImages()
        {

            foreach (RepeaterItem item in rpt1.Items)
            {
                if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                {
                    var checkBox = ((HtmlGenericControl)(item.FindControl("abc")));

                    checkBox.InnerHtml = "<img src='http://pra.aps.org/sites/pra.test.ridge.aps.org/themes/PRA/graphics/button_go.gif'/>";
                }
            }
        }
    }

    public class Numbers
    {
        public int Number { get; set; }
    }
}

早些时候,code正在执行的单个线程。现在,我试图保持分开线程,但无济于事。我想刷新页面,每次是主要问题。难道我只能刷新计时器的部分而不是整​​个页面。

Earlier the code was executing on single thread. Now, I tried keeping the threads apart but no avail. I think reloading page each time is main issue. Is it possible that I can only refresh the timer part not the entire page.

推荐答案

所有你需要做的是:

  1. 在ASPX code,移动中继到UpdatePanel.ContentTemplate,中庸之道下面lblNum。
  2. 在C#code,删除行t.Suspend();

我希望这会帮助你。

code

ASPX:

<form id="form1" runat="server">
<asp:ScriptManager ID="scr" runat="server">
</asp:ScriptManager>
<asp:Timer ID="timer" runat="server" Interval="1000" OnTick="timer_Tick">
</asp:Timer>
<asp:UpdatePanel runat="server" ID="up1" UpdateMode="Always">
    <ContentTemplate>
        <asp:Label runat="server" ID="lblNum"></asp:Label>
        <asp:Repeater runat="server" ID="rpt1">
    <ItemTemplate>
        <table>
            <tr>
                <td>
                    <span id="abc" runat="server">
                        <%#Eval("Number") %>
                    </span>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>
    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="timer" EventName="Tick" />
    </Triggers>
</asp:UpdatePanel>

CS:

    protected void timer_Tick(object sender, EventArgs e)
    {
        lblNum.Text = string.Format("{0:dd:MM:yyyy hh:mm:ss}", DateTime.Now);

        if (DateTime.Now.Second == 30)
        {
            Thread t = new Thread(DisplayImages);
            t.Start();
            //t.Suspend();
            t.Join();
        }
    }

这篇关于找不到与ASP计时器滴答事件ASP中继子控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆