2012-10-22 23 views
5

WebGridに簡単に接続し、デフォルト設定を使用してajaxを追加することができます。しかし、私が把握することに苦労してきたことの1つは、グリッドがajax経由で並べ替えやページングを行っているときにローディングインジケータを追加する方法です。ASP.net MVC Webgrid

コールバック関数が組み込まれています。これはajaxローディングインジケータをオフにするのに最適ですが、どうすれば簡単にオンにすることができますか?

以下は現在私のwebgridのコードです。

@{ 
    var grid = new WebGrid(rowsPerPage: Model.CountPerPage, ajaxUpdateContainerId: "GridArea"); 
    grid.Bind(Model.Users, 
       autoSortAndPage: false, 
       rowCount: Model.TotalCount 
      ); 
    grid.Pager(WebGridPagerModes.All); 
} 
<div id="GridArea"> 
    @grid.GetHtml(htmlAttributes: new {id ="UserGrid"}, 
     columns: new [] { 
     grid.Column("ID", canSort: false), 
     grid.Column("FirstName"), 
     grid.Column("LastName"), 
     grid.Column("Email"), 
     grid.Column("FullName", canSort: false) 
     } 
    ) 
</div> 

私は以下を使用しようとしましたが、どちらも機能しませんでした。

<script> 
    $(function() { 
     $("#UserGrid").live("ajaxStart", function() { 
      alert("start"); 
     }); 
    }); 
</script> 

これは初めて動作しますが、グリッドの最初のAjaxリフレッシュ後は動作しません。

<script> 
    $(function() { 
     $('#UserGrid').ajaxStart(function() { 
      alert("start"); 
     }); 
    }); 
</script> 

答えて

8

これは動作するはずです。

$(document).ajaxStart(function(){ 
    //Show your progressbar here 
}).ajaxStop(function(){ 
    //Hide your progressbar here 
}); 

最初Ajaxの応答の後、DOMが再作成され、.ajaxStartがさえ結合が失われているので、あなたの第2のアプローチは機能していません。それをグローバルドキュメントオブジェクトと結びつけ、それは常にそこに存在します。

+0

ページの他のajax駆動部分が必要な場合、私はWebgridから直接呼び出しを区別する必要がある場合、これをどのように達成できますか? –

+2

webgridのDOMがajax呼び出しに置き換えられるたびに、webgridのajaxイベントハンドラを再バインドする必要があります。ですから、あなたが何をしていても、グローバルなAjaxハンドラが必要です。コールを区別したい場合は、隠しフィールドを使用してajax呼び出しを発生させるコントロールを追跡することができます。 – Tariqulazam

1

はい、上記の回答が役に立ちます。基本的には、クライアントからサーバーへのすべてのajaxリクエストを処理するJquery APIがあります。だからあなたは何かajax操作を行うと、それは関数をトリガーします。 ajax操作でインジケータとして呼び出すことができるカスタムCSSや画像、またはいくつかの機能を配置できます。

+0

ページの他のajax駆動部分を必要とし、Webgridから直接呼び出しを区別する必要がある場合は、これをどのように行うことができますか? –

関連する問題