C# 在asp.net页面加载数据时使用母版页显示加载消息

C# 在asp.net页面加载数据时使用母版页显示加载消息,c#,asp.net,.net-4.0,master-pages,page-loading-message,C#,Asp.net,.net 4.0,Master Pages,Page Loading Message,我花了好几个小时在谷歌上搜索过去的问题,但很难找到答案(不管是我无法将其正确地输入到我的解决方案中,还是因为它们没有母版页而不适合我) 我的问题是,我有几个asp.net页面,加载这些页面可能需要一段时间(有时需要5秒以上),因为在Page_load方法中有很多数据是从数据库请求的。为了防止用户认为页面已经崩溃,或者刷新页面,或者做其他事情,我想在页面加载时,放置一条加载消息,隐藏页面上的所有其他内容(菜单除外) 我正在使用ASP.NET4.0和母版页,并用C#编写代码 我最成功的一个方法是在我

我花了好几个小时在谷歌上搜索过去的问题,但很难找到答案(不管是我无法将其正确地输入到我的解决方案中,还是因为它们没有母版页而不适合我)

我的问题是,我有几个asp.net页面,加载这些页面可能需要一段时间(有时需要5秒以上),因为在Page_load方法中有很多数据是从数据库请求的。为了防止用户认为页面已经崩溃,或者刷新页面,或者做其他事情,我想在页面加载时,放置一条加载消息,隐藏页面上的所有其他内容(菜单除外)

我正在使用ASP.NET4.0和母版页,并用C#编写代码

我最成功的一个方法是在我的母版页上使用UpdatePanel,其中内容模板覆盖了contentplaceholder,但是我知道这不是最好的方法,而且它只显示一次,即用户登录,加载消息出现,所有数据加载到主页上(dashboard.aspx)加载消息消失了,这正是我想要的。但是,如果用户离开该页面,然后单击“主页”,则加载消息将不会再次出现,只是需要一段时间才能加载。它也不会出现在任何其他需要明显时间加载的页面上

下面是master.aspx的正文

<body>
<form runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<div class="page">
    <div class="header">
        <div class="title">
            <h1>
                Header
            </h1>
        </div>
        <div class="loginDisplay">
            <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
                <AnonymousTemplate>
                    [ <a href="~/Account/Login.aspx" id="HeadLoginStatus" runat="server">Log In</a>
                    ]
                </AnonymousTemplate>
                <LoggedInTemplate>
                    Welcome <span class="bold">
                        <asp:LoginName ID="HeadLoginName" runat="server" />
                    </span>! [
                    <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out"
                        LogoutPageUrl="~/Default.aspx" />
                    ]
                </LoggedInTemplate>
            </asp:LoginView>
        </div>
        <div class="clear hideSkiplink">
            <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                IncludeStyleBlock="false" Orientation="Horizontal" OnMenuItemClick="NavigationMenu_MenuItemClick">
                <Items>
                    <asp:MenuItem Text="Home" />
                    <asp:MenuItem Text="About" />
                </Items>
            </asp:Menu>
        </div>
    </div>
    <div class="main">

         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:ContentPlaceHolder ID="MainContent" runat="server" />

                <asp:UpdateProgress ID="UpdateProgress1" runat="server">
                    <ProgressTemplate>
                        <asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center">
                            <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/loader.gif" />
                        </asp:Panel>

                    </ProgressTemplate>
                </asp:UpdateProgress>
            </ContentTemplate>
        </asp:UpdatePanel>


         <asp:UpdatePanelAnimationExtender ID="UpdatePanel1_UpdatePanelAnimationExtender" 
             runat="server" Enabled="True" TargetControlID="UpdatePanel1">
         </asp:UpdatePanelAnimationExtender>


    </div>
    <div class="clear">
    </div>
</div>
<div class="footer">
</div>
</form>

]
欢迎
! [
]

下面是dashboard.aspx页面(加载时间较长的页面)


欢迎
给你
个人仪表盘。

后起之秀

姓名: 公司: 出生日期:
更多细节。。。
你能告诉我做这件事的最佳方法吗?我哪里做错了?还有,当UpdateProgress模板显示内容模板时,我如何隐藏内容模板呢


谢谢。

您可以使用UpdateProgress控件。您可以从Ajax扩展选项卡下的收费箱中获得它。 我正在向您描述一个场景:
假设我有一个Upadate面板名UpdatePnl1,我有一个按钮说GO。当我们点击GO时,它应该重定向到另一个页面。在那之前,它会提示你,请稍等

现在我的代码将是这样的

<asp:UpdatePanel ID="UpdatePnl1" runat="server">
<ContentTemplate>
<asp:Button ID="BtnGO" runat="server" Text="GO" onclick="BtnGO_Click"/>
</ContentTemplate>
</asp:Updatepanel>
下面是UpdateProgress的代码,您需要添加什么

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePnl1" >
      <ProgressTemplate>

      <asp:Label ID="LblWaitMsg" runat="server" Text="Processing Request, Please Wait..."></asp:Label>           

       </ProgressTemplate>
 </asp:UpdateProgress>


注意:你的页面应该包含ScriptManager。

好吧,我知道我做错了什么,我想我会发布我所做的事情,希望能帮助其他可能会遇到同样问题的人

基本上,我没有逻辑地考虑它。更新面板外有一些控件,例如导航菜单,它们永远不会触发更新进度,因为它们与面板无关!我必须向更新面板添加触发器,以处理面板之外发生的所有事情

因此,在我的母版页中,我有以下代码

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="NavigationMenu" />
        </Triggers>
    </asp:UpdatePanel>

    <asp:UpdateProgress ID="progress" runat="server" DynamicLayout="true" DisplayAfter="0">
            <ProgressTemplate>
                <div id="overlay">
                    <div id="modalprogress">
                        <div id="theprogress">
                            <asp:Image ID="loader" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/loader.gif" />
                            Please wait...
                        </div>
                    </div>
                </div>
            </ProgressTemplate>
        </asp:UpdateProgress>  


     <asp:UpdatePanelAnimationExtender ID="UpdatePanel1_UpdatePanelAnimationExtender" 
         runat="server" Enabled="True" TargetControlID="UpdatePanel1">
     </asp:UpdatePanelAnimationExtender>

请稍候。。。

希望这能帮助别人

谢谢你的快速回复。使用Example.aspx这样的加载页面,这是否会对用户单击后退按钮时产生影响?我的母版页中既有UpdateProgress,也有脚本管理器。
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePnl1" >
      <ProgressTemplate>

      <asp:Label ID="LblWaitMsg" runat="server" Text="Processing Request, Please Wait..."></asp:Label>           

       </ProgressTemplate>
 </asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="NavigationMenu" />
        </Triggers>
    </asp:UpdatePanel>

    <asp:UpdateProgress ID="progress" runat="server" DynamicLayout="true" DisplayAfter="0">
            <ProgressTemplate>
                <div id="overlay">
                    <div id="modalprogress">
                        <div id="theprogress">
                            <asp:Image ID="loader" runat="server" ImageAlign="AbsMiddle" ImageUrl="~/images/loader.gif" />
                            Please wait...
                        </div>
                    </div>
                </div>
            </ProgressTemplate>
        </asp:UpdateProgress>  


     <asp:UpdatePanelAnimationExtender ID="UpdatePanel1_UpdatePanelAnimationExtender" 
         runat="server" Enabled="True" TargetControlID="UpdatePanel1">
     </asp:UpdatePanelAnimationExtender>