Я пытаюсь передать массив/IEnumerable из Guids к 'GET' Для MVC метод, который выглядит следующим образом:Pass JavaScript/JSON массив MVC 'GET' Метод
[HttpGet]
public ActionResult ZipResults(IEnumerable<Guid> ids)
{
using(var zip = new Zip())
{
foreach(var id in ids)
{
var stream = GetDataStream(id);
zip.AddEntry("filename.txt", stream);
}
}
var outputStream = new MemoryStream();
zip.Save(outputStream);
return FileStreamResult(outputStream, "application/octet-stream"){
FileDownloadName = "Results.zip" };
}
И мой Javascript выглядит это:
$('the-button').click(function(){
// 1. Get the guids from a table and add to javascript array (works fine)
// 2. Grey-out screen and show processing indicator (works fine)
// 3. This is how I'm calling the "ZipResults" action:
$.ajax({
url: '@Url.Action("ZipResults", "TheController")',
type: 'GET',
data: $.toJSON({ ids: _ids }),
dataType: 'json',
contentType: 'application/json;charset=utf-8',
traditional: true,
success: function(){
// Undo the grey-out, and remove processing indicator
},
error: function(){
}
});
});
Мое предположение заключается в том, что это откроет диалоговое окно загрузки в браузере. Как бы то ни было, массив javascript, передаваемый контроллеру, является нулевым (на стороне сервера он корректно работает на стороне клиента). Кроме того, это работает отлично с «POST», однако, метод а «POST» использовали этот путь не будет форсировать диалог загрузки ...
Открыт для предложений :)
как всегда, вы, вероятно, прав насчет того, чтобы не делать этого с ajax ... – Didaxis
@ErOx, абсолютно. Не используйте AJAX, если вы хотите загрузить файлы. –