3

過去の質問をグーグルで検索して検索するのに何時間も費やしましたが、それらの回答をどこにでも見つけるのに苦労しました(ソリューションに正しく入れることができないか、マスターページがないため私には適していません)。

私の質問は、Page_Load メソッドでデータベースから大量のデータが要求されているため、読み込みに時間がかかる (5 秒以上かかる場合もある) asp.net ページがいくつかあるということです。ユーザーがページがクラッシュしたと考えたり、ページを更新したり、何か他のことをしたりしないようにするために、ロード中にページ上の他のすべて (メニューを除く) を非表示にする Loading メッセージを表示したいと考えています。

マスターページで ASP.Net 4.0 を使用し、C# でコーディングしています。

私が最も成功したのは、コンテンツ テンプレートが contentplaceholder をカバーするマスター ページで UpdatePanel を使用することですが、これが最良の方法ではないことはわかっています。 、読み込みメッセージが表示され、すべてのデータがホームページ (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 のページです (読み込みに時間がかかるページです)。

<asp:Panel ID="PanelWelcome" runat="server">
    <h1>
        Welcome
        <asp:Label ID="LabelUserName" runat="server" Text="[User Name]" />&nbsp;to your
        personal Dashboard.</h1>
    <table width="100%" cellpadding="5px">
        <tr>
            <td style="width: 70%" valign="top">
                <asp:Panel ID="Panel2" runat="server">
                    <p>
                        &nbsp;</p>
                    <h4>
                        Up and Coming </h4>
                    <br />
                    <asp:GridView ID="GridViewItin" runat="server" Width="100%" HorizontalAlign="Left"
                        OnRowDataBound="GridViewItin_RowDataBound">
                    </asp:GridView>
                </asp:Panel>
            </td>
            <td style="width: 30%">
                <asp:Panel ID="PanelProfile" runat="server">
                    <asp:ImageButton ID="ImageButtonProfile" runat="server" ImageUrl="~/Images/BlankProfile.jpg"
                        Width="150px" /><br />
                    <h4>
                        Name:</h4>
                    <asp:Label ID="LabelPARname" runat="server" Text="[Person Name]"></asp:Label>
                    <h4>
                        Company:</h4>
                    <asp:Label ID="LabelBARname" runat="server" Text="[Company Name]"></asp:Label>
                    <h4>
                        Date of Birth:</h4>
                    <asp:Label ID="LabelPARdob" runat="server" Text="[DOB]"></asp:Label><br />
                    <asp:LinkButton ID="LinkButtonProfilePage" runat="server" OnClick="LinkButtonProfilePage_Click">More details...</asp:LinkButton>
                </asp:Panel>
            </td>
        </tr>
    </table>
</asp:Panel>

最善の方法と、どこが間違っているのか教えてください。また、UpdateProgress テンプレートが表示されているときに ContentTemplate を非表示にするにはどうすればよいですか?

ありがとう。

4

2 に答える 2

3

さて、私は自分が何を間違っていたのかを理解しました.同じ問題に遭遇する可能性のある他の誰かを助けるために、私がしたことを投稿すると思いました...

基本的に論理的に考えていませんでした。NavigationMenu などの更新パネルの外側にあるコントロールは、パネルとは関係がないため、更新の進行状況を起動しません。更新パネルにトリガーを追加して、パネル外で発生するすべてのことを処理する必要がありました。

したがって、マスターページには次のコードがありました

<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>

うまくいけば、それは他の誰かを助けるでしょう!

于 2012-08-14T15:28:15.403 に答える