我有一个非常标准的 ajax.beginform 布局,带有 OnSuccess 回调。但在 IE8 中,不会调用回调,但在 Chrome 中可以正常工作。
我的观点包括 jquery.validate.min.js、jquery.validate.unobstusive.min.js 和 jquery.unobstrusive-ajax.min.js。
该视图用作局部视图,并包含它需要的所有脚本,以及回调将调用的 javascript 函数。
我还要注意,我必须将最初创建 MVC3 项目时附带的 jquery.validate.min.js 升级到已经可以在 IE8 上正常工作的项目。
为什么这不起作用有任何已知问题吗?还是我错过了什么?
[cshtml]
<script type="text/javascript">
function FormSuccess(context) {
alert("FormSuccess()");
};
</script>
@using (Ajax.BeginForm("GetMessage", "Form", new AjaxOptions { OnSuccess = "FormSuccess" }))
{
[控制器]
[HttpPost]
public JsonResult GetMessage(MessageModel model)
{
return Json( success = true, message = "success" );
}
在 Chrome 中,回调被击中,但在 IE8 中我得到一个文件下载对话框。下载文件后,我得到一个包含以下内容的文件:
{"success":false,"messages":"success"}
正如你所看到的,这是我在这里做的一件非常简单的事情,但它似乎并不想在 IE8 中工作。
有任何想法吗?
更新
我发现因为我正在从 ascx 页面呈现 razor cshtml 文件,所以没有调用 AjaxOptions 回调。我创建了一个做同样事情的沙盒应用程序,如果我有一个 cshtml 渲染部分 cshtml,一切正常,但如果我有一个 aspx 渲染部分 cshtml,则不会调用回调