MVC2 - 使用AJAX和非AJAX提交表单

时间:2012-02-10 04:32:45

标签: ajax asp.net-mvc download http-post

使用MVC2我在视图中使用Ajax帮助器创建了一个表单。表单发布到控制器,该控制器绑定到模型对象。控制器返回PartialViewResult,并将HTML更新为div。到目前为止,非常好。

我现在需要提交相同的表单并将结果返回到生成的文件中供用户下载。显然我不希望文件内容进入我的div。

有没有一种优雅的方法来处理这种情况而不必破解它?我对MVC / AJAX很新,但对我来说仍然是一个混乱点。

2 个答案:

答案 0 :(得分:1)

您不能使用ajax调用来下载文件。以下链接可以帮助您做您想做的事情 JQuery Ajax call for PDF file download
http://forums.asp.net/t/1683990.aspx/1

答案 1 :(得分:1)

好的,所以我找不到任何简单的解决方案,所以我想出了自己的解决方案。当我想要下载时,我从表单中删除Ajax事件处理程序,在我想要Ajax时将它们放回去。我猜这是一种更优雅的方式,因为这感觉就像一个“聪明的伎俩”。我愿意接受更好的建议,但到目前为止这是我的首选方法。

在我的页面上引用ToggleAjax.js:

var ToggleAjax = function ($, form) {
    var onclick = form.onclick,
        onsubmit = form.onsubmit;

    $('input[class*="ajax-enabled"]').click(function () {
        form.onclick = onclick;
        form.onsubmit = onsubmit;
    });
    $('input[class*="ajax-disabled"]').click(function () {
        form.onclick = function () { };
        form.onsubmit = function () { };
    });
};

然后我在我的页面上调用ToggleAjax并传入以下表单:

$(function () {
    ToggleAjax($, $('form')[0]);
});

当然,我将课程ajax-enabledajax-disabled添加到输入控件中。