代码之家  ›  专栏  ›  技术社区  ›  LordBoBCUP

ASP具有GridView的多个UpdatePanel,但只有一个更新

  •  1
  • LordBoBCUP  · 技术社区  · 6 年前

    我希望在单个aspx页面上有3个GridView,由单个DB查询提供(显示静态数据,无需操作),并基于10秒计时器刷新表。我有返回已排序的数据表的代码。我可以让它更新我的一个更新面板中的一个gridview,但其他两个不渲染。

    代码为:

    <%@ Page Title="Index" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Admin.aspx.cs" Inherits="Test.Admin" %>
    <script runat="server" type="text/c#">
        protected void Page_PreRender(object sender, EventArgs e)
        {
            Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
            FullAccessSession.DataSource=GetStatus("FullAccess");
            FullAccessSession.DataBind();
    
            Label2.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
            LimitedAccessSession.DataSource=GetStatus("LimitedStatus");
            LimitedAccessSession.DataBind();
    
            Label3.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
            LogData.DataSource = GetLog() ;
            LogData.DataBind();
    
        }
    
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
            FullAccessSession.DataSource=GetStatus("FullAccess");
            FullAccessSession.DataBind();
    
        }
    
        protected void Timer2_Tick(object sender, EventArgs e)
        {
            Label3.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
            LogData.DataSource = GetLog() ;
            LogData.DataBind();
        }
    
        protected void Timer3_Tick(object sender, EventArgs e)
        {
            Label2.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
            LimitedAccessSession.DataSource=GetStatus("LimitedStatus");
            LimitedAccessSession.DataBind();
        }
    
    
    
    </script>
    

    <div class="row">
        <div class="col-md-7">
            <asp:UpdatePanel ID="UpdateFullAccessStatus" runat="server" UpdateMode="Always">
                <ContentTemplate>
                    <!--<asp:Timer ID="Timer1" runat="server" Interval="10000" OnTick="Timer1_Tick">
                    </asp:Timer>-->
                    <asp:Label ID="Label7" runat="server" Font-Bold="True" Text="Full Access Logged In Users"></asp:Label>
                    <br />
                    <asp:Label ID="Label1" runat="server" Text="Panel not refreshed yet."></asp:Label>
                    <br />
    
                    <asp:GridView ID="FullAccessSession" runat="server">
    
                    </asp:GridView>
                    <br />
    
                </ContentTemplate>
            </asp:UpdatePanel>
    
            <asp:UpdatePanel ID="UpdateLimitedAccessStatus" runat="server" UpdateMode="Always">
                <ContentTemplate>
                    <!--<asp:Timer ID="Timer3" runat="server" Interval="10000" OnTick="Timer2_Tick">
                    </asp:Timer>-->
    
                    <asp:Label ID="Label4" runat="server" Font-Bold="True" Text="Limited Access Logged In Users"></asp:Label>
                    <br />
                    <asp:Label ID="Label2" runat="server" Text="Panel not refreshed yet."></asp:Label>
                    <br />
                    <asp:GridView ID="LimitedAccessSession" runat="server">
                    </asp:GridView>
                    <br />
    
    
                </ContentTemplate>
            </asp:UpdatePanel>
    
    
            <asp:UpdatePanel ID="UpdateLog" runat="server" UpdateMode="Always">
                <ContentTemplate>
    
                    <!--<asp:Timer ID="Timer2" runat="server" Interval="10000" OnTick="Timer2_Tick">
                    </asp:Timer>-->
    
                    <asp:Label ID="Label5" runat="server" Font-Bold="True" Text="General Log"></asp:Label>
                    <br />
    
                    <asp:Label ID="Label3" runat="server" Text="Panel not refreshed yet."></asp:Label>
                    <asp:GridView ID="LogData" runat="server">
                    </asp:GridView>
    
                </ContentTemplate>
            </asp:UpdatePanel>
    
        </div>
    </div>
    

    我不明白为什么我的一个更新面板会工作。正如您所看到的,我已经尝试使用PreRender函数以及(目前已注释掉的)计时器。标签正在使用当前时间更新,但仅显示一个gridview。

    任何帮助都将不胜感激 谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aristos    6 年前

    这里的问题是 UpdatePanel中的post返回后计时器脚本丢失 -解决方案是 将其从更新面板中取出 并使用触发器

    下面是一个我测试它并运行的示例。

    <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="2800"></asp:Timer>
    <asp:Timer ID="Timer2" runat="server" ontick="Timer2_Tick" Interval="2500"></asp:Timer>
    
    <div>
        <div>
        <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1"  />
            </Triggers>
    
            <ContentTemplate>                   
                <asp:Literal runat="server" ID="txtTest1"></asp:Literal>
            </ContentTemplate>
        </asp:UpdatePanel>
        </div>
    
        <div>
        <asp:UpdatePanel runat="server" ID="UpdatePanel2" UpdateMode="Conditional">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer2"  />
            </Triggers>
    
            <ContentTemplate>
                <asp:Literal runat="server" ID="txtTest2"></asp:Literal>
            </ContentTemplate>    
        </asp:UpdatePanel>
        </div>
    </div>
    

    以及 ontick 是触发器,例如:

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        txtTest1.Text += "1.";
    }