gpt4 book ai didi

jquery - 导航到新页面/操作方法时的 MVC 3 Ajax 加载图标

转载 作者:行者123 更新时间:2023-12-01 00:51:39 25 4
gpt4 key购买 nike

我一直在广泛搜索如何创建一个导航链接,该链接将在操作方法使用 Razor View 引擎在 MVC 3 中运行时显示 ajax 加载图标。虽然我找到了大量有关添加加载图标的信息,但所有这些信息似乎都与在当前 View 中发布数据有关。

我有一个简单的菜单页面,其中包含调用其他页面上的操作方法的操作链接,这反过来会呈现一个 View 。下面显示了转到 OrdersController 和 Index 操作方法的示例。

菜单.cshtml

@Html.ActionLink("Orders", "Index", "Orders",null,new { id = "OrderLink" })<br />

我正在尝试修改上面的链接,以便在处理 Index 操作时和返回 View 之前显示 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 操作方法中放置一个断点,它就会命中该断点。但是,当操作方法完成时,Orders\Index.cshtml 永远不会呈现到页面。我只是停留在 Menu\Index.cshtml 页面上。

我知道 Orders/Index.cshtml 应该呈现一个 View 。

OrdersController.cs

public ActionResult Index()
{
....

return View(OrdersViewModel);
}

我在这里做错了什么?该 View 是否返回到我的 ajax 调用而不是渲染?我怎样才能获得这个功能?

如果我以错误的方式处理此问题,请告诉我。

发出请求时,我应该在目标页面的操作方法内而不是在链接上执行此操作吗?也许可以通过将加载图标显示为我请求的 Index 操作方法中的第一行代码,并在返回 View 之前再次隐藏它?

我也许会尝试通过 JQuery 显示/隐藏组合来做到这一点?

<script type="text/javascript">
function showLoadingSpinner() {
$("#ajaxLoaderDiv").show();
};
function hideLoadingSpinner() {
$("#ajaxLoaderDiv").hide();
};

</script>

提前感谢您的帮助和建议

乍得

最佳答案

我的决心:

我自己解决了我的问题,但我想我会将解决方案发布给任何其他正在尝试类似操作的人。

我将 menu.cshtml 页面上的链接保留为 @Html.ActionLink 而不是 ajax 链接。但我添加了一个 onclick html 属性,该属性调用 javacript 来显示微调器。

menu.cshtml

@{
ViewBag.Title = "Menu";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="container" style="text-align:center">
<div>
@Html.ActionLink("Orders", "Index", "Orders", null, new { id = "OrderLink", onclick="showPageLoadingSpinner()" })
</div>
</div>

我的 _Layout.cshtml 部分 View 中有微调器的脚本。在我的 menu.cshtml View 中引用了它: 布局 =“~/Views/Shared/_Layout.cshtml”;

下面是我的完整 _Layout.cshtml 页面,包括 ajax div 和脚本引用。

_Layout.cshtml

<html>
<head>
@Content.Script("jquery-1.5.1.min.js", Url)
@Content.Script("jquery.unobtrusive-ajax.min.js", Url)
</head>

<body>
<div id="ajaxLoaderDiv" style="position:fixed; top:40%; left:45%; z-index:1234; display:none;">
</div>
<div class="container">
@RenderBody()
</div>
</body>
</html>

<script type="text/javascript">
function showPageLoadingSpinner() {
$('#ajaxLoaderDiv').show();
$('#ajaxLoaderDiv').append(
'<img src="@Url.Content("~/Images/AjaxLoaderImg.gif")" alt="Loading..."class="ajax-loader" />'
);
}

function hidePageLoadingSpinner() {
setTimeout(function () {
$('.ajax-loader').remove();
$('#ajaxLoaderDiv').hide();
}, 20000);
}

</script>

这对我有用,因为在 menu.cshtml 页面上,当您单击链接时,JavaScript 将运行,在操作链接将您发送到下一页之前显示微调器。因此,当您导航到的页面加载时,您将看到微调器。

当新页面准备好时,它将呈现并显示。虽然您发送到的新页面 (Orders/Index.cshtml) 使用包含 ajax div 的相同布局页面,但它会使用布局设置的 ajaxloader div 属性 display:none 加载新页面。这最终会删除加载页面时显示的 ajax 微调器。

因此,无需调用 javascript 来隐藏微调器,因为在呈现新页面时它始终会被删除。

除非其他人告诉我这是一种不合适的方法并成功地向我展示了更好的方法,否则我将接受这个答案。

关于jquery - 导航到新页面/操作方法时的 MVC 3 Ajax 加载图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19594807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com