2013-01-06 16 views
5

Wysyłam obiekt JSON za pomocą następującego kodu. Kontroler zwracający wartości w formacie CSV, który powinien zostać udostępniony, aby otworzyć lub zapisać jako plik CSV. I nie może zrozumieć, że to, co dokładnie kod należy wpisać sukcesu: function (wynik)Jak obsłużyć typ zwrotu FileStream w poście .ajax?

link do eksportu

Html.ActionLink("Export", "", "", null, new { @onclick = "return exportData();"}) 

function exportData() { 

var searchViewModel = getExLogSearchModelData(); 
var path = getAbsolutePath("ExclusionLog", "ExportData"); 
$.ajax({ 
    url: path, 
    cache: false, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'html', 
    type: 'POST', 
    data: JSON.stringify(searchViewModel), 
    success: function (result) { 
    }, 
    error: function (error) { 
     $("#voidcontainer").html("Error"); 
    } 
}); 

}

Controller ActionResult

public ActionResult ExportData(ExclusionLogSearchViewModel postSearchViewModel) 
    { 
     try 
     { 
      IEnumerable<ExclusionLogViewModel> exclusionLogData = null; 
      exclusionLogcData = this._workerService.GetExclusionLogData(postSearchViewModel); 

      return CSVFile(exclusionLogMembershipSyncData.GetStream<ExclusionLogViewModel>(), "ExclusionLogTables.Csv"); 
     } 
     catch (Exception ex) 
     { 
       throw ex; 
     } 
     return null; 
    } 

można proszę zasugerować, jak to zrobić?

Odpowiedz

3

I został trafiony ten sam problem i nie mogę znaleźć sposobu, aby pobrać plik za pomocą $.ajax ale znalazłem doskonałą biblioteki JavaScript, który zapewnia podobne zachowanie:

https://github.com/johnculviner/jquery.fileDownload

wystarczy powołać coś takiego:

$.fileDownload(path, { 
    httpMethod: 'POST', 
    data: JSON.stringify(searchViewModel), 
    success: function (result) { 
    }, 
    error: function (error) { 
     $("#voidcontainer").html("Error"); 
    } 
}); 

Pamiętaj też o utworzeniu cookie w kontrolerze. W src/Common jest odpowiedni filtr działania, który zrobi to za Ciebie.