6

我想在 ActionResult 请求期间显示一个 AJAX 加载图标,该请求可能需要几秒钟才能处理。

实现这一目标的最佳方法是什么?

我只想在构建它的验证通过后显示图标(我使用的是 MVC3,EF Code First,所以验证会自动放在页面上)。

在 ActionResult 期间可能会有进一步的验证/异常,在这种情况下会向用户显示一条消息,然后我希望加载图标再次消失。

4

3 回答 3

12

将您的链接定义为 Ajax 操作链接,并在页面某处指定旋转 GIF 的 ID。

<div id="result"></div>
<img id="spinner" src="../content/ajaxspinner.gif" style="display: none;">
@Ajax.ActionLink("Link Text", "ActionName", "ControllerName", null, new AjaxOptions{UpdateTargetId = "result", LoadingElementId = "spinner"}, null)

或者如果它是一种形式:

@using(Ajax.BeginForm("Action", "Controller", null, new AjaxOptions{UpdateTargetId = "result", LoadingElementId = "spinner"}, null))
{
   @Html.TextBox("Data")<br/>
   <input type="submit" value="Submit" />
}
于 2011-06-24T10:39:26.443 回答
3

将图像放在 div 标签中,如下所示:

<div id="busydiv" style="display:none;"><img src="busything.gif" /></div>

然后像这样创建您的链接:

@Ajax.ActionLink("Link Text", "ActionName", "ControllerName", null, new AjaxOptions { LoadingElementDuration = 1000, LoadingElementId = "busyDiv", HttpMethod = "Post", UpdateTargetId = "targetDiv", OnFailure = "PostFailure", OnSuccess = "PostSuccess", OnComplete = "PostOnComplete" }, null)

或以一种形式这样做:

@using (Ajax.BeginForm("TestAjax", new AjaxOptions { LoadingElementDuration=1000, LoadingElementId="dave", HttpMethod = "Post", UpdateTargetId = "targetDiv", OnFailure = "PostFailure", OnSuccess = "PostSuccess", OnComplete = "PostOnComplete" }))

根据此处的文档,显然省略了您不需要的那些 AjaxOptions:http: //msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions.aspx

于 2011-06-24T13:42:43.170 回答
1

只是我的两分钱:

Chris 发布的解决方案是有效的并且可以工作,但是您必须添加对下面两个 javascript 库的引用。请注意,顺序很重要:

<script src="~/scripts/jquery-1.8.0.js"></script>
<script src="~/scripts/jquery.unobtrusive-ajax.js"></script>

当您创建一个预先加载了捆绑和所有这些 nu-get 包的 MVC 应用程序时,这对您来说可能不是问题,但如果您像我一样创建了一个空的 ASP.NET MVC 应用程序,您可能会遇到问题。

于 2016-07-17T08:27:46.770 回答