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

MVC2-使用AJAX和非AJAX提交表单,ajax,asp.net-mvc,download,http-post,Ajax,Asp.net Mvc,Download,Http Post,使用MVC2,我在视图中使用Ajax助手创建了一个表单。表单发布到绑定到模型对象的控制器。控制器返回PartialViewResult,HTML更新为div。到目前为止,一切正常 我现在需要提交相同的表单,并将结果返回到生成的文件中,供用户下载。显然,我不希望文件内容进入我的div 有没有一种优雅的方式来处理这种情况,而不必把它砍成碎片?我对MVC/AJAX还相当陌生,这对我来说仍然是一个困惑点。您不能使用AJAX调用下载文件。下面的链接可能会帮助你做你想做的事情 好的,所以我在任何地方都找不

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

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


有没有一种优雅的方式来处理这种情况,而不必把它砍成碎片?我对MVC/AJAX还相当陌生,这对我来说仍然是一个困惑点。

您不能使用AJAX调用下载文件。下面的链接可能会帮助你做你想做的事情

好的,所以我在任何地方都找不到任何简单的解决方案,所以我提出了自己的解决方案。我在需要下载时从表单中删除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-enabled
ajax-disabled
添加到输入控件中