1

遅延データが表示される可能性がある ASP.Net ページで高レベルの仕様を実行しています。

ページが読み込まれると、表示される最初のデータはローカル データベースから取得されます (表示が高速になります)。私が欲しいのは、外に出て更新されたデータを探すための別のプロセスです(私が持っている他のサービスから)。これには時間がかかりますが、データを表示し、新しいデータが見つかった場合は、その場で既存のページの先頭に追加するという考え方です。

これを達成する方法についていくつかの推奨事項を希望します。

この技術範囲は、ASP.Net 4.0、C# MVC3、および HTML5 です。

ありがとう。

4

1 に答える 1

2

jQueryを使用した AJAX は、これを実現するための優れた方法です。たとえば、コンテンツ プレースホルダー div をマークアップに配置できます。

<div id="result" data-remote-url="@Url.Action("Load", "SomeController")"></div>

DOM がロードされると、次のようになります。

$(function() {
    $.ajax({
        url: $('#result').data('remote-url'),
        type: 'POST',
        beforeSend: function() {
            // TODO: you could show an AJAX loading spinner
            // to indicate to the user that there is an ongoing
            // operation so that he doesn't run out of patience
        },
        complete: function() {
            // this will be executed no matter whether the AJAX request
            // succeeds or fails => you could hide the spinner here
        },
        success: function(result) {
            // In case of success update the corresponding div with
            // the results returned by the controller action
            $('#result').html(result);
        },
        error: function() {
            // something went wrong => inform the user 
            // in the gentler possible manner and remember
            // that he spent some of his precious time waiting 
            // for those results
        }
    });
});

ここで、Load コントローラー アクションはリモート サービスとの通信を処理し、データを含む部分ビューを返します。

public ActionResult Load()
{
    var model = ... go ahead and fetch the model from the remote service
    return PartialView(model);
}

このデータのフェッチが I/O 集中型である場合は、リモート ソースからデータをフェッチするという長時間の操作中にワーカー スレッドを危険にさらすことを回避する、I/O 完了ポートの非同期コントローラーを利用できます。

于 2011-04-14T16:39:08.080 に答える