1

現在、ASP.net Web フォーム サイトに 2 つのページがあります。最初のページで、ユーザーは詳細を入力してからボタンを押すことができます。これにより、response.redirect が次のページにリダイレクトされ、ユーザーの詳細が送信されます。

この次のページのページ読み込みは

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {   
            GetInformation();        
        }
    }

GetInformation() は、約 15 ~ 20 秒かかるユーザーの詳細を使用して長い処理を行います。

ユーザーが最初のページでボタンを押すと、GetInformation() の実行が完了するまで最初のページにとどまり、新しいページが読み込まれます。

私がやりたいことは、ユーザーがボタンを押すと、新しいページが表示され、読み込み中などのオーバーレイが表示され、GetInformation() が開始されることです。GetInformation が完了すると、オーバーレイは消えます。

私はグーグルで検索を行い、いくつかのアイデアを見てきましたが、どれも私の問題に実際に適合していないようです.

これを行うための最良の方法は何ですか?

4

2 に答える 2

1

page_loadこのページは、イベントが完全に実行された後にのみ表示されます。そのため、イベントで関数を呼び出さないでpage_loadください。代わりに、タイマー コントロールを使用して関数呼び出しをトリガーします。

次のようなタイマーコントロールを追加するとしましょう

<asp:Timer ID="tmr" runat="server" Interval="3000" OnTick="tmr_Tick" Enabled="true">
</asp:Timer>

サーバー側のコードは次のようになります

protected void tmr_Tick(object sender, EventArgs e)
{
    tmr.Enabled = false;
    GetInformation();        
    loadingIndicator.Style.Add("display", "none");
}

読み込みインジケーターを表示するには、このような div をページに配置します

<div id="loadingIndicator" runat="server" style="background-image:url(ajax-loader-small.gif);background-repeat: no-repeat; width: 100%; height: 104px; background-position: center;">
</div>

読み込みインジケータはデフォルトで表示され、GetInformation()実行が終了したら表示を変更できます

お役に立てれば....

于 2013-03-08T12:58:48.957 に答える
1

非常に簡単な解決策:

  1. 新しいページを作成しますLoading.aspx。適切なスタイルとすべてを追加して、予想される読み込みページに見えるようにします。

  2. このページで、タグ内に次のタグを追加します<head><meta http-equiv="refresh" content="0;URL='LongLoadingPage.aspx'" />

LongLoadingPage.aspx直接リダイレクトする代わりに、Loading.aspxページにリダイレクトします。

もちろん、これは簡単な解決策です。AJAX リクエストを使用して長時間実行される操作を初期化するより良い解決策があるかもしれません (UpdatePanelまたは バニラを使用XMLHttpRequest)。

于 2013-03-08T12:53:23.493 に答える