9

これは簡単だと思いますが、わかりません:

いくつかの UpdatePanels を含む ASP.NET ページがあります。UpdatePanels に「しばらくお待ちください」というテキストが表示された状態で、ページを完全に読み込みます。次に、ページが完全に読み込まれたら、コード ビハインド関数を呼び出して UpdatePanel を更新します。

このアイデアを実装するために必要な Javascript とコード ビハインドの組み合わせに関するアイデアはありますか?

SAL

PS: 関数呼び出しを Page_Load に入れようとしましたが、ページが配信される前にコードが実行され、実行したい関数に時間がかかるため、ページの読み込みに時間がかかりすぎます。

4

8 に答える 8

8

私は ScriptManager の提案をいじりました-最終的には機能するようになったと思いますが、タイマーのアイデアは実装が簡単で、実際には(!)それほどハックではないようです?!

最初のページのレンダリングが完了したにパネルを更新する方法は次のとおりです...

default.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAXPostLoadCall._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <h2>And now for a magic trick...</h2>
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True">
        </asp:ScriptManager>
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Timer ID="Timer1" runat="server" Interval="2000" ontick="Timer1_Tick" />
                    <asp:Label ID="Label1" runat="server">Something magic is about to happen...</asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>

        </div>
    </form>
</body>
</html>

default.aspx.csの背後にあるコードは読み取ります

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace AJAXPostLoadCall
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        public void DoMagic()
        {
            Label1.Text = "Abracadabra";
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            // Do the magic, then disable the timer
            DoMagic();
            Timer1.Enabled = false;
        }

    }
}

そのため、ページが読み込まれ、ページが読み込まれてから 2 秒後にタイマー (UpdatePanel に含まれる) が起動します (タイマーが実際にいつ開始されるかわかりません)。ラベル テキストが書き換えられ、それ以上の更新を停止するためにタイマーが無効になります。

十分に単純ですが、これが恐ろしいハックであるかどうかを教えてもらえますか?

于 2008-08-28T19:16:41.803 に答える
2

ScriptManager.RegisterStartupScriptを見てください。

アイデアは、起動時に実行するスクリプトを登録することです(ページが読み込まれた後だと思います)。スクリプトは、UpdatePanel を介してポストバックを発生させる関数を呼び出す必要があります

于 2008-08-28T10:23:33.677 に答える
1

この投稿の最初の質問から、ユーザーが探しているのは、更新パネルの読み込み中にユーザーに表示されるメッセージだと思います。以下のようなUpdateProgressコントロールを、ページのUpdatePanelコントロールのすぐ上に配置し、UpdatePanelでイベントをトリガーし、通常どおりバックエンドコードを配置すると、UpdateProgressコントロール内に含まれるものはすべてUpdatePanel中に読み込まれます。コンテンツはバックエンドで処理されています。

<asp:UpdateProgress AssociatedUpdatePanelID="UpdatePanel1" ID="UpdateProgress1" runat="server">
  <ProgressTemplate>
    <div class="mystyleclass">
      Please Wait...
    </div>
  </ProgressTemplate>
</asp:UpdateProgress>

面倒な手動のjavascriptのものは必要ありません。

于 2009-07-03T12:41:21.590 に答える
1

特定のミリ秒数 (ページをロードするため) 後に起動されるタイマー コントロールを使用します。タイマー ティック イベントで、更新パネルを更新します。

于 2008-08-28T16:49:36.197 に答える
1

簡単に理解できるものではなく、UpdatePanels でこのようなことを行うと、噛み付きます。

于 2009-05-19T10:20:51.197 に答える
0

親指を立てて、SALと残りの皆さんに感謝します。これは私が抱えていた大きな問題を解決しました。私の手順は、ページが最終的にレンダリングされて表示されるまでに最大1分かかりました。

ありがとう!

于 2009-05-19T08:05:21.157 に答える
0

起動スクリプトでトムのアプローチを使用すると、次のように呼び出すことができます。

__doPostBack('UpdatePanelName', '');

于 2008-08-28T12:24:09.517 に答える
0

ScriptManager.RegisterStartupScript を使用すると、更新パネル内で起動時にスクリプトを実行できます。古い ClientScript.RegisterStartupScript を使用すると、レンダリングするスクリプトは udpate パネルの境界の外にあるため、非同期ページの読み込み中には実行されません。

于 2008-08-28T11:47:41.350 に答える