2013-07-03 8 views
0

У меня есть вид списка, и я хочу экспортировать все данные в виде файлов txt. В качестве требования мне нужно создать 3 txt-файла, нажав кнопку «Экспорт». У меня есть действие контроллера, чтобы сгенерировать эти файлы и загрузить их в виде zip-файла. Когда я нажимаю кнопку «Экспорт», он вызывает действие «ExportFiles». И в то же время я хочу перенаправить действие «Список», поскольку я хочу обновить представление.Переадресация на просмотр/просмотр обновления после сгенерированных файлов загружается asp.net mvc

Но проблема в том, что я не могу выполнить обе задачи одновременно. Так как я могу это сделать?

Это мой код;

public virtual ActionResult List() 
    { 
     // Code : showing my list 
     return view(); 
    } 

    public virtual ActionResult ExportFiles() 
    { 
     // Code : Generating files 
     return new ZipResult(filePath, fileName + ".zip"); 
     // HERE I WANT TO REFRESH MY VIEW 
    } 

    public class ZipResult : ActionResult 
    { 
     private readonly string _filePath; 
     public string Filename { get; set; } 

     public ZipResult(string filePath, string fileName) 
     { 
      _filePath = filePath; 
      Filename = fileName; 
     } 

     public override void ExecuteResult(ControllerContext context) 
     { 
      if (context == null) 
      { 
       throw new ArgumentNullException("context"); 
      } 

      var response = context.HttpContext.Response; 
      response.ContentType = "application/gzip"; 
      using (var zip = new ZipFile()) 
      { 
       zip.AddFile(_filePath); 
       zip.Save(response.OutputStream); 
       var cd = new ContentDisposition 
       { 
        FileName = Filename, 
        Inline = false 
       }; 
       response.Headers.Add("Content-Disposition", cd.ToString()); 
      } 
     } 

    } 

ответ

0

Скорее невозможно как обновить, так и загрузить файл с одного ответа. При попытке вы получите исключение типа «Невозможно перенаправить после отправки HTTP-заголовков».

Вы должны настроить свою стратегию немного, f.e .:

  • Обновить страницу вручную после определенного времени с помощью JS/JQuery после того, как кнопка Экспорт щелкнули.
  • Возврата страница с дополнительной метой-тегом обновления, который будет перенаправлять на URL загрузки: <meta http-equiv="refresh" content="5,url=DownloadFile.aspx" />

Надеется, что это помогает.

0

Поскольку ваш экспорт будет возвращать файл, это похоже на то, что вам просто нужно обновить представление, из которого вы начинаете (ваш список). Если это так, то то, что я делаю, - это обновление страницы через несколько секунд после выбора кнопки загрузки (я делаю это так, чтобы в представлении отображались обновленные подсчеты и дата загрузки).

В представлении (ваш список) Я обычно добавляю событие onclick к кнопкам загрузки, которые запускают скрипт, аналогичный приведенному ниже. Все остальное остается прежним.

function ReloadPage() 
{ 
    setTimeout(function() { 
     window.location.reload(1); 
    }, 5000); 
} 
Смежные вопросы