1

私の ajax リクエストが速すぎて、ユーザーが ajax 呼び出しが行われたことに気付かないことがあります。したがって、Ajax リクエストが終了した場合でも、UpdateProgress コントロールを最小限の時間表示するように強制したいと思います。

例えば:

John がサイトを閲覧すると、ajax 呼び出しが完了するまでに 2 秒かかります。UpdateProgress コントロールをその 2 秒間だけ表示したいのです。

メアリーもサイトを閲覧しますが、ajax 呼び出しには 0.5 秒以上かかります。したがって、UpdateProgress コントロールを少なくとも 1 秒間表示したいと考えています。

これを行う方法について誰かアイデアがありますか?

編集

Telerik が提供する AjaxLoadingPanel コントロールにこの機能があることを発見しました。まさにこれを行う MinDisplayTime というプロパティがあります。標準の (無料の) asp.net ajax コントロールを使用してこれを行う方法を知っておくとよいでしょう。

ありがとう

4

3 に答える 3

1

私はイントラネット サイトで同じ問題を抱えていました。このサイトでは、UpdatePanelコンテンツが急速に変更されたため、デバッグやデータベースのチェックを行わないと、更新が行われたかどうかを判断できませんでした。

私がこの問題に取り組んだ方法は、UpdatePanel に以前と同じように機能させることでしたが、UpdatePanelAnimationExtenderたとえば を使用して背景色の変化を短時間点滅させてから、通常の状態に戻すことで、アクションが発生したという印象をユーザーに与えました。これが 0.3 秒のようにすばやく発生し、適切な「アクション」カラーが選択されている場合、これは非常に効果的です。

<ajaxToolkit:UpdatePanelAnimationExtender ID="myUpdatePanelExtender" runat="server" TargetControlID="myUpdatePanel">
     <Animations>
        <OnUpdating> ... </OnUpdating>
        <OnUpdated> ... </OnUpdated>
    </Animations>
</ajaxToolkit:UpdatePanelAnimationExtender>

AJAX Control Toolkit を取得する必要がありますが、Asp.Net AJAX の作業を行っている場合は、まだ取得していない場合は取得したほうがよいでしょう。

タグ内に何を配置するか<OnUpdating>などについては、Asp.Net Ajax Control Toolkit のサイト ページ「Using Animations」を参照してください。

于 2009-09-30T08:45:36.097 に答える
0
protected void Button1_Click(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(3000);
    Label1.Text = DateTime.Now.ToString();
}

http://www.asp.net/Ajax/Documentation/Live/tutorials/ProgrammingUpdateProgress.aspx

于 2009-09-29T01:14:17.967 に答える
0

サーバー側のコードの実行にかかる時間を追跡することで、後者を回避できます (または、ajax の実行時間を測定することでさらに効果的ですが、それはよりトリッキーです)。

アイデアはこれです

long startTime = System.DateTime.Now.Ticks;
//this process can take some time, especially when executed for the first time
//it gets data and binds it to a control
FetchData();
//if this takes not enough time, add an extra second to allow the UpdateProgress to display
if (TimeSpan.FromTicks(DateTime.Now.Ticks - startTime).TotalSeconds < 1)
            System.Threading.Thread.Sleep(1000);
于 2009-11-05T10:09:35.443 に答える