ASP 具有网格视图的多个 UpdatePanels 但只有一个更新

ASP Multiple UpdatePanels with gridviews but only one updating

我希望在由单独的数据库查询(显示静态数据,无操作)提供的单个 aspx 页面上有 3 个网格视图,并基于 10 秒计时器刷新表格。我有 return 数据表排序的代码。我可以让它更新我的更新面板之一中的一个 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 函数以及(目前已注释掉的)计时器。标签随当前时间更新,但只显示一个网格视图。

如有任何帮助,我们将不胜感激 谢谢

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

这是一个我测试过的例子。

<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.";
}