【问题标题】:ASP.NET MVC 2.0 Ajax call - LoadingElementId not re-hidden when OnSuccess script specifiedASP.NET MVC 2.0 Ajax 调用 - 指定 OnSuccess 脚本时未重新隐藏 LoadingElementId
【发布时间】:2023-03-07 16:38:02
【问题描述】:

我正在用 ASP.NET MVC 2.0 编写一个非常简单的 Web 应用程序,它用作 Web 服务的测试接口。各个页面提供了一个用户界面来输入请求消息的参数。参数通过 Ajax 提交回控制器,该控制器返回一个部分视图,其中包含

 标记中的响应 SOAP 消息(HTML 编码的 XML)...

// In controller...
ActionResult WebMethodTest()
{
    return View(new WebMethodModel());
}

[HttpPost]
ActionResult WebMethodTest(WebMethodModel model)
{
    model.Response = MyServiceProxy.WebMethod(model.Request);
    return PartialView("SoapResponse", model.Response);
}

// In view
<% using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId="Response", LoadingElementId="Loading", HttpMethod="POST", OnSuccess="prettyPrint"}))
   { %>
    <!-- various model bound controls... -->
<% { %>

<div id="Loading" style="text-align:center; display:none">
    <img src="../../Content/ajax-loader.gif" alt="loading..." /><br />
    working...
</div>

不幸的是,在 Ajax 调用后返回数据时,Loading div 元素没有再次隐藏,它保持可见。有趣的是,如果我删除 OnSuccess="prettyPrint",它确实会被正确隐藏。我的印象是我的 OnSuccess 脚本覆盖了默认行为,而不是另外执行。我不想丢失 prettyPrint,因为它正在为正在显示的 XML 着色...如何保持默认的加载元素行为以及我自己的 OnSuccess 钩子?

干杯!

【问题讨论】:

  • prettyPrint 是做什么的?如果您还没有这样做,我建议您从该 javascript 函数返回 true。
  • 这是 google 的客户端语法高亮工具 - code.google.com/p/google-code-prettify。我知道,如果您覆盖 OnBegin 并返回 false,Ajax 调用将被取消,但 OnSuccess 会在 DOM 更新后调用...
  • 它非常适合我。你能发布一些代码(成功函数)

标签: javascript asp.net-mvc ajax


【解决方案1】:

我通过修改 OnSuccess 脚本解决了这个问题:

OnSuccess = "function() { prettyPrint(); return true; }"

所以看起来,就像 OnBegin 一样,返回 false(或除 true 之外的任何内容)会取消操作,尽管到此阶段 DOM 已经更新,所以你唯一可以取消的就是隐藏 Loading 元素......这似乎不是很有用!

【讨论】:

  • 虽然我自己解决了这个问题 - 如果有人想对幕后发生的事情提供更深入的解释,我很乐意将其标记为答案 :)
猜你喜欢
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2015-12-24
相关资源
最近更新 更多