【问题标题】:MVC3 Ajax.BeginForm's AjaxOptions Callbacks not being called in IE8在 IE8 中未调用 MVC3 Ajax.BeginForm 的 AjaxOptions 回调
【发布时间】:2012-11-13 19:03:20
【问题描述】:

我有一个非常标准的 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 上正常工作的 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,则不会调用回调

【问题讨论】:

  • 在其他浏览器中也可以使用吗?

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


【解决方案1】:

以下不正确

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

【讨论】:

  • 这仍然给了我文件下载对话框
  • 实际上我什至不能用上面的代码构建。不喜欢缺少成功变量
  • 我也遇到了同样的问题。您的页面是否正在刷新(发布)?
  • 嘿,我找到了。你根本不应该返回 json 结果。
  • 不,这不是 ie 问题。whit Ajax.BeginForm 从操作返回的视图将在不回发的情况下呈现。但您不能返回 JSON 结果。如果您发布完整的视图代码,我可以提供帮助你有这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多