我正在为我们接手的项目修改一些MVC代码,我没有吨的MVC经验。
应用程序显示一个表格,其中包含可以选择的项目。这些项目将传递给控制器,控制器将创建包含这些项目的下载文件。以前,这些项目是通过QueryString传递的,除非做出很多选择,否则这很好。 IE的URL限制为~2048个字符,每个项目长度约为30个字符,因此下载70个项目会导致问题(截断的查询字符串)。
我修改了javascript以通过Ajax将数据传递给控制器。这工作正常,但现在当数据返回到页面时,没有显示下载窗口。
旧的javascript看起来像这样:
function doDownload(url)
{
var data = AppendItems();
url = url;
var mybars = "directories=no,location=no,menubar=no,status=no";
mybars += ",titlebar='',toolbar=no,alwaysraised=yes,maximize=no";
var myoptions = "scrollbars=yes,fullscreen,resizable=yes";
var myfeatures = mybars + "," + myoptions;
if (!newWindow || newWindow.closed()) {
newWindow = window.open(url + data, "DownloadIncomingFile", myfeatures);
newWindow.focus();
}
}
我已将该列表转换为:
$.ajax({
type: "POST",
url: "DownloadIncomingWires/Download",
data: {
filePaths: filePaths,
completeStatus: completeStatus
},
traditional: true
});
这是成功地将数据发送到控制器,我只是不知道在VIEW端做什么来显示典型的“下载”窗口。
每当我添加window.open片段时,我都会收到404错误。没有它,我什么也得不到。
答案 0 :(得分:1)
如果你按照ajax加载这个,你就不会得到一个下载窗口。因为jquery处理内部已回答的文档。
window.open方法是我的理由不正确的方法。因为用户看到了一个不需要的弹出窗口。
我的解决方案是使用下载文件(控制器)的URL设置iframe
所以在jQuery中:
doDownload = function(url) {
var dframe = jQuery('#downloadframe');
if(dframe.length < 0) {
jQuery('body').append('<iframe style="position:absolute; left:-10000px; visible:hidden;" src="'+url+'" id="downloadframe" />');
} else {
dframe.attr('src',url);
}
};
您的控制器必须将内容类型设置为:application / force-download或已提供文件的Content-type。
祝你好运