我遇到了这个问题,突然做了一个表单的简单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();
});
答案 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") %>