MVC3 Ajax.BeginForm的AjaxOptions回调没有在IE8中调用

时间:2012-11-13 19:03:20

标签: asp.net-mvc-3 internet-explorer-8

我有一个非常标准的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页面渲染一个剃刀cshtml文件,所以没有调用AjaxOptions回调。我创建了一个沙盒应用程序执行相同的操作,如果我有一个cshtml渲染部分cshtml,一切正常,但如果我有一个aspx渲染部分cshtml,回调不会被调用

1 个答案:

答案 0 :(得分:2)

以下是不正确的

[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函数发送它。