MVC3 Ajax.BeginForm的AjaxOptions Callbacks在IE8中未被调用



我有一个非常标准的ajax.beginfo布局,带有OnSuccess上的回调。但在IE8中,回调不会被调用,但它在Chrome中运行良好。

我的视图中包括jquery.validate.min.js、jquery.vvalidate.unobstusive.min..js和jquery.unobstrusive-ajax.min.js。

该视图用作部分视图,包含所需的所有脚本,以及回调将调用的javascript函数。

我还将注意到,我不得不将最初创建MVC3项目时附带的jquery.validate.min.js升级为一个可以与IE8正常工作的jquery.validate.min.js。

为什么这不起作用,是否存在任何已知的问题?还是我错过了什么?

[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,回调就不会被称为

以下是不正确的

[HttpPost]
public JsonResult GetMessage(MessageModel model)
{
return Json( success = true, message = "success" );
}

.更改为:

[HttpPost]
public JsonResult GetMessage(MessageModel model)
{
return new JsonResult{success = true, message = "success"};
}

编辑:

您必须返回一个完整的View,而不是json结果。

如果您想发送ajax请求并获得JSON结果,则必须通过jquery-ajax函数发送。

最新更新