浏览器提示下载JSON响应,ASP.NET MVC2

时间:2010-06-29 21:17:40

标签: c# asp.net-mvc json

我遇到了这个问题,突然做了一个表单的简单ajax提交。 JSON恢复格式正确,但浏览器提示下载它。 Fiddler将内容类型显示为正确:

application/json; charset: utf-8

这是我的javascript:

 $("#submitbutton").click(function(e) {
 $.post('FormTest', function(o) {
  FormCallback(o);
  });
}); 

这是服务器端:

public JsonResult FormTest(string test) {
        return Json("This worked!");
    }

同样,我从服务器上恢复了一个对象,但是它提示我下载(Firefox)或者只是在浏览器的新选项卡中显示该对象(Chrome)。

我发现了另外一个这样的问题,但作者没有解释错误的原因。这太疯狂了!有什么想法吗?

编辑:正确的代码如下所示,在e.preventDefault旁边,我还需要告诉它使用哪些表单数据:

  $("#submit-button").click(function(e) {
    $.post('address', $("#form").serialize(), function(o) {
        FormCallback(o);
    });
   e.preventDefault();
});

3 个答案:

答案 0 :(得分:2)

您希望取消默认操作,我希望:

 $("#submitbutton").click(function(e) {
 $.post('FormTest', function(o) {
  FormCallback(o);
  });
  return false; // <<=====
});

您也可以尝试:

e.preventDefault();

如果这不起作用

答案 1 :(得分:1)

除了@ Marc的答案,我想补充一点:

return Json("This worked!");

实际上不起作用,因为它不返回有效的JSON对象。它只是将"This worked!"返回给客户端。您需要构造对象:

return Json(new { Message = "This worked!" });

答案 2 :(得分:1)

MVC 2默认返回JSON mimetype。如果要以纯HTML格式接收JSON数据,则应按以下方式传递JSON数据:

return Json(model, "text/html", JsonRequestBehavior.AllowGet);

还有一点,您可以使用[ChildActionOnly]标记您的操作,并以这种方式在您的视图中调用您的操作

var json = <%= Html.Action("YourActionMethod", "YourControllerName") %>