JsonResult在浏览器中显示文件下载

时间:2010-04-03 15:22:53

标签: asp.net asp.net-mvc jquery

我正在尝试使用jquery.Ajax将数据发布到返回JsonResult的ASP.NET MVC2操作方法。一切都很好,除非响应返回到浏览器,它被视为文件下载而不是传递给成功处理程序。这是我的代码:

使用Javascript:

 <script type="text/javascript">
        $(document).ready(function () {
            $("form[action$='CreateEnvelope']").submit(function () {
                $.ajax({
                    url: $(this).attr("action"),
                    type: "POST",
                    data: $(this).serialize(),
                    dataType: "json",
                    success: function (envelopeData) {
                        alert("test");
                    }
                });
            });
            return false;
        });
    </script>

控制器上的操作方法:

public JsonResult CreateEnvelope(string envelopeTitle, string envelopeDescription)
    {
        //create an envelope object and return
        return Json(envelope);
    }

如果我打开下载的文件,json正是我正在寻找的,mime类型显示为application / json。我错过了什么让jquery.ajax调用接收到json返回?

2 个答案:

答案 0 :(得分:2)

您在提交事件的处理程序中缺少“return false”。如果你没有返回false,那么JQuery仍然会像正常情况一样传递提交。

<script type="text/javascript">
    $(document).ready(function () {
        $("form[action$='CreateEnvelope']").submit(function () {
            $.ajax({
                url: $(this).attr("action"),
                type: "POST",
                data: $(this).serialize(),
                dataType: "json",
                success: function (envelopeData) {
                    alert("test");
                }
            });
            // IMPORTANT: return false to make sure the normal post doesn't happen!
            return false;
        });
        return false;
    });
</script>

几乎那里!

答案 1 :(得分:0)

我刚刚开始使用类似于此的ajax,并且查看代码的第一印象会表明您不需要在表单上调用submit?您只需要执行ajax调用。我可能错了,但可能是ajax正在返回数据并且页面正在进行刷新,其中页面数据被json数据替换?