Возвращаемый файл для сохранения из метода HttpPost Asp.Net MVC
У меня есть проект Asp.Net MVC, и на одной его странице пользователь может редактировать загруженные данные в таблицу (изменять изображения, строки, порядок элементов и т. Д.).
После того, как все изменения внесены, клиент нажимает кнопку «Загрузить» и сохраняет полученный xml-файл на своем жестком диске для последующих манипуляций в будущем.
Итак, у меня есть простая форма HTML:
<form name="mainForm" data-ng-submit="sendForm()" ng-controller="ImportController" novalidate enctype="multipart/form-data">
<!-- table structure definition removed for briefing -->
<td>
{{data.Items[$index].Id}}
</td>
<td>
<img class="center-cropped" ng-src="data:image/jpg;base64, {{data.Items[$index].Image}}">
</td>
<td>
<input class="form-control" type="text" value="{{data.Items[$index].LastName}}" />
</td>
<td>
<input class="form-control" type="text" value="{{data.Items[$index].FirstName}}" />
</td>
<td>
<input class="form-control" type="text" value="{{data.ClaimItems[$index].MiddleName}}" />
</td>
<input class="btn-success" id="submit-btn" type="submit" data-ng-disabled="mainForm.$invalid" value="Download" />
</form>
Эти данные формы отправляются через вызов функции angularJs, который выглядит следующим образом:
$scope.sendForm = function () {
// some preparations to send image data through json
for (var i = 0; i < $scope.data.Items.length; i++) {
$scope.data.Items[i].ImageAsString = $scope.data.Items[i].Image;
}
$http.post("Download", { array: $scope.data })
.success(function (responseData) {
console.log(responseData);
})
.error(function (responseData) {
console.log("Error !" + responseData);
});
};
После вызова этой функции подготовленный http-запрос отправляется на asp.net mvcСкачать действие:
[HttpPost]
public FileResult Download(ItemsArrayWrapper array)
{
// here goes incoming data processing logic
// ...
return File(array.ConvertToItemsArray().Serialize(), "text/xml", name);
}
Я хочу, чтобы мой метод Download возвращал FileResult, чтобы на клиенте отображался диалог сохранения файла. Но ничего не происходит.
Я пытался создать различные заголовки Response, возвращать разные MimeTypes, изменять типы возвращаемых данных метода Download и даже пытался вызвать метод [HttpGet] из метода Download, но на клиенте все еще ничего не появлялось.
Искал в браузере мониторинг сети - отправляется только один POST-запрос.
Можно ли отправить данные из метода HttpPost клиенту, который был вызван из функции angularJs таким образом? Чего мне не хватает, и почему диалоговое окно сохранения не отображается в браузере?
Или кто-нибудь может предложить другие более подходящие решения для достижения этой цели?