我一直在广泛搜索如何创建一个导航链接,该链接将在使用 Razor 视图引擎在 MVC 3 中运行操作方法时显示一个 ajax 加载图标。虽然我找到了大量关于添加加载图标的信息,但它们似乎都与在当前视图中发布数据有关。
我有一个简单的菜单页面,其中包含用于调用其他页面上的操作方法的操作链接,这反过来将呈现一个视图。下面显示了一个转到 OrdersController 和 Index 操作方法的示例。
菜单.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。
菜单.cshtml
@Ajax.ActionLink("Orders", "Index", "Orders", new AjaxOptions { LoadingElementId="ajaxLoaderDiv" });<br />
这在它显示 ajax 加载图标几秒钟的意义上是有效的。我什至可以在 OrdersController 的 Index 操作方法中放置一个断点,它会命中它。但是当 Action 方法完成时,Orders\Index.cshtml 永远不会呈现到页面上。我只是留在 Menu\Index.cshtml 页面上。
我知道 Orders/Index.cshtml 应该呈现一个视图。
OrdersController.cs
public ActionResult Index()
{
....
return View(OrdersViewModel);
}
我在这里做错了什么?这个视图是否被返回给我的 ajax 调用而不是渲染?我怎样才能获得这个功能?
如果我以错误的方式处理此问题,请告诉我。
发出请求时,我应该在目标页面的操作方法中而不是在链接上执行此操作吗?也许通过将加载图标显示为我请求的 Index 操作方法中的第一行代码,并在返回视图之前再次隐藏它?
我可能会尝试通过 JQuery 显示/隐藏组合来做到这一点?
<script type="text/javascript">
function showLoadingSpinner() {
$("#ajaxLoaderDiv").show();
};
function hideLoadingSpinner() {
$("#ajaxLoaderDiv").hide();
};
</script>
提前感谢所有的帮助和建议
乍得