アクション メソッドが Razor ビュー エンジンを使用して MVC 3 で実行されているときに ajax 読み込みアイコンを表示するナビゲーション リンクを作成する方法について、私は広範囲に検索してきました。ローディング アイコンの追加に関する多くの情報を見つけましたが、それらはすべて現在のビュー内のデータの投稿に関連しているようです。
他のページでアクション メソッドを呼び出すためのアクション リンクを含む単純なメニュー ページがあり、それによってビューがレンダリングされます。OrdersController および Index アクション メソッドに移動する例を以下に示します。
Menu.cshtml
@Html.ActionLink("Orders", "Index", "Orders",null,new { id = "OrderLink" })<br />
Index アクションの処理中およびビューが返される前に ajax 読み込みアイコンを表示するように上記のリンクを変更しようとしています。
読み込みアイコンを含む div を作成し、共有の _Layout.cshtml ページに配置しました。
_Layout.cshtml
<div id="ajaxLoaderDiv" style="position:fixed; top:40%; left:45%; z-index:1234; display:none;">
<img src="@Url.Content("~/Images/AjaxLoaderImg.gif")" alt="Loading..."class="ajax-loader" />
</div>
ajax 読み込みアイコンを試して表示するために、リンクを Ajax ActionLink に変更してみました。
Menu.cshtml
@Ajax.ActionLink("Orders", "Index", "Orders", new AjaxOptions { LoadingElementId="ajaxLoaderDiv" });<br />
これは、ajax Loading アイコンを数秒間表示するという意味で機能します。また、OrdersController の Index アクション メソッド内にブレークポイントを配置することもでき、ヒットします。ただし、アクション メソッドが完了すると、Orders\Index.cshtml はページにレンダリングされません。Menu\Index.cshtml ページにとどまっています。
Orders/Index.cshtml がビューをレンダリングすることになっていることはわかっています。
OrdersController.cs
public ActionResult Index()
{
....
return View(OrdersViewModel);
}
ここで何が間違っていますか?このビューは、レンダリングするのではなく、私の ajax 呼び出しに返されますか? この機能を取得するにはどうすればよいですか?
これについて間違った方法で行っている場合は、お知らせください。
リクエストを行うときに、リンクではなく、ターゲット ページのアクション メソッド内でこれを行う必要がありますか? おそらく、私が要求しているインデックスアクションメソッドのコードの最初の行として読み込みアイコンを表示し、ビューを返す直前に再び非表示にすることでしょうか?
JQueryの表示/非表示の組み合わせでこれを試してみませんか?
<script type="text/javascript">
function showLoadingSpinner() {
$("#ajaxLoaderDiv").show();
};
function hideLoadingSpinner() {
$("#ajaxLoaderDiv").hide();
};
</script>
事前にすべてのヘルプとアドバイスに感謝します
チャド