我正在ASP.NET MVC 2.0中编写一个非常简单的Web应用程序,它用作Web服务的测试接口。各个页面呈现用户界面以输入请求消息的参数。参数通过Ajax提交回控制器,Ajax在< pre>中返回包含响应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调用之后返回数据时,不再隐藏加载div元素,它仍然可见。有趣的是,如果我删除OnSuccess =“prettyPrint”,它确实会被正确隐藏。我的印象是我的OnSuccess脚本覆盖了默认行为,而不是另外执行。我不想丢失prettyPrint,因为它正在显示正在显示的XML ...如何保持默认的加载元素行为以及我自己的OnSuccess钩子?
干杯!
答案 0 :(得分:0)
我通过修改OnSuccess脚本解决了这个问题:
OnSuccess = "function() { prettyPrint(); return true; }"
所以看起来,像OnBegin一样,返回false(或者除了true之外的任何东西)会取消操作,尽管在这个阶段DOM已经被更新了,所以你唯一可以隐藏的就是隐藏Loading元素......这看起来并不十分有用!