質問

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

さまざまなAJAXメソッドと部分ビューを見てきましたが、これを達成するための良い方法を見つけることができません。私が本当にやりたいことは、このアニメーション化された.gifを表示するOnActionExecutingイベント中にビューまたはパーシャルビューを返すActionFilterを持ち、コントローラーが処理を完了して実際のビューを持つビューまたはパーシャルビューを返すとデータを表示できます。

また、jQueryは、バックグラウンドでコントローラーアクションを呼び出してビューをレンダリングするための素晴らしい非同期の方法を提供できるようです。助けていただければ幸いです。

役に立ちましたか?

解決

コントローラー内:

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などの他のものを取得できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top