【发布时间】:2010-02-10 22:39:34
【问题描述】:
设置:
控制器包含一个方法public ActionResult SaveFile(),它返回一个FileContentResult。
什么有效:
视图包含一个表单,它提交给这个动作。结果是这个对话框:
什么不起作用:
视图包含一些 javascript,用于对表单发布的同一控制器操作进行 AJAX 调用。响应不会触发上述对话框,甚至 AJAX 成功函数,而是触发 AJAX 错误函数,XMLHttpRequest.responseText 包含文件响应。
我需要做什么:
使用 AJAX 请求文件,最终得到与提交表单时相同的结果。如何让 AJAX 请求提供提交表单时显示的对话框?
【问题讨论】:
-
为什么不能只使用非ajax调用?
-
可以,但我想在保存完成后在 javaScript 函数中进行一些其他处理,例如取消阻止表单,这是我在保存之前阻止的。
-
OK,这样就可以先调用ajax SaveFile了。 SaveFile 将返回真/假。当它返回 true 时,您调用非 ajax GET 来获取文件。
-
当我从 jquery.ajax 调用控制器的 SaveFile 时,没有弹出浏览器的下载对话框。真正的问题是我想在保存期间阻止 UI。我可以保存得很好(提交表单的正常后期处理),但是我无法启动 blockUI。我可以捕获一个事件(按钮单击或提交处理程序,启动块并显示繁忙指示器,但随后我无法触发解锁。有没有办法从控制器的 Action 调用 jQuery 函数,以便我可以触发解锁。我没有没有注意到我可以使用的任何事件。这就是我尝试通过 Ajax 调用进行调用的原因。
-
好的,你仍然可以使用ajax,但不要返回FileContentResult。返回 true/false,如果返回 true,则初始化非 ajax get 下载文件。
标签: asp.net asp.net-mvc ajax