Мне нужно сделать это, потому что страница, с которой я работаю, уже имеет представление <form>
в этом районе, поэтому мне нужно использовать AJAX, чтобы обойти проблему <form> within a <form>
.AJAX Опубликовать, чтобы скачать файл с помощью MVC
Проблема в том, что мой файл не отправляется на веб-страницу, моя страница получает статус ответа 200 OK, но файл не отправляется.
АЯКС вызова на Responses.vbhtml:
function exportCsv()
{
var formExportSettings = new Object();
var responseIdsList = [];
formExportSettings.formId = '@Model.form.formId.ToString()';
formExportSettings.exporttype = 'csv';
formExportSettings.format = $('input[name=export-format]:checked').val();
formExportSettings.startDate = $('input[id=exportstartdate]').val();
formExportSettings.endDate = $('input[id=exportenddate]').val();
$('input[name=responseId]:checked').map(function() {
responseIdsList.push($(this).val());
});
formExportSettings.responseIds = responseIdsList;
var jsonData = JSON.stringify(formExportSettings);
$.ajax({
url: '/Forms/ExportCsv',
type: 'POST',
dataType: 'json',
data: jsonData,
contentType: 'application/json; charset=utf-8',
success: function (success) {
// never get the success message
var message = success;
console.log(message);
}
});
}
MVC действие контроллера:
Function ExportCSV(model As FormsExportSettings) As ActionResult
Dim exportModel As FormsExportModel = New FormsExportModel(model)
Try
Dim fileName = exportModel.form.formName + ".csv"
Response.Clear()
Response.Buffer = True
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "text/csv"
Response.AddHeader("Content-Disposition", "attachment;filename=" & fileName)
Response.BinaryWrite(exportModel.writer.ExportToBytes())
Response.Flush()
Response.End()
Catch ex As Exception
End Try
End Function
writer
в приведенном выше разделе (exportModel.writer.ExportToBytes()
) имеет тип CsvExport()
, который экспортирует мой Csv как сырые байты UTF8.
EDIT: Я только заметил, что я получать файл CSV в качестве Response
. В Chrome я могу вытащить консоль dev, перейти в Network и просмотреть Response, и я вижу текст CSV-файла. Это просто не дает мне возможность сохранить его.
MVC + пример jQuery: http://stackoverflow.com/a/21464346/423430 – user423430
Это кажется полезным, но похоже, что он не использует стандартный метод .ajax. – MaylorTaylor