15

プロセスを実行し、いくつかのビュー データを設定し、このデータの結果をビューでユーザーに返す MVC コントローラーがあります。処理時間は、処理中のデータ量によって異なります。プロセスの実行中にビュー内にアニメーション化された .gif を表示して、何かが起こっていることをユーザーに知らせる良い方法が必要です。

さまざまな AJAX メソッドと部分ビューを見てきましたが、これを達成するための良い方法はまだ見つかりません。私が本当にやりたかったのは、このアニメーション化された .gif を表示する OnActionExecuting イベント中に View または Partial View を返す ActionFilter を用意することでした。次に Controller が処理を完了して ViewData、実際の View を含むビューまたは部分ビューを返します。データを表示できました。

また、jQuery は、バックグラウンドでコントローラー アクションを呼び出してビューをレンダリングするための優れた非同期方法を提供できるようです。どんな助けでも大歓迎です。

4

1 に答える 1

26

コントローラ内:

public JsonResult GetSomething(int id)
{
    return Json(service.GetSomething(id));
}

ビュー(javascript、JQueryを使用):

$('#someLink').click(function()
{
    var action = '<%=Html.ResolveUrl("~/MyController.mvc/GetSomething/")%>' + $('#someId').val() + '?x=' + new Date().getTime();
    $('#loading').show()
    $.getJSON(action, null, function(something) 
    {
        do stuff with something
        $('#loading').hide()
    });
});

これは、アクションの後に「id」が来るルートを想定していることに注意してください。アクションの「x」パラメーターは、IEの積極的なキャッシュを無効にすることです。

ビュー(マークアップ):

<img id="loading" src="images/ajax-loader.gif" alt=""/> 
<!-- use a css stlye to make display:none -->

ここでローダーのGIFを取得します。

また、Jsonでこれを行う必要はないことに注意してください。必要に応じて、コントローラーアクションからHTMLやXMLなどの他のものをフェッチできます。

于 2008-11-13T17:05:09.693 に答える