Скачивание файла через контроллер MVC - PullRequest
1 голос
/ 22 апреля 2011

Я изменяю некоторый код 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. Без этого я ничего не получу.

1 Ответ

1 голос
/ 22 апреля 2011

если вы загрузите это за ajax, вы не получите окно загрузки.потому что jquery обрабатывает ответный документ внутренний.

метод window.open по моей причине не правильный путь.потому что пользователь видит всплывающее окно, что не нужно.

мое решение состоит в том, чтобы установить iframe с URL-адресом вашего файла загрузки (контроллера)

, поэтому в 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 или на тип контента доставленного файла.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...