Возможно, запрос Ajax загружает файл, но браузер не интерпретирует его как загрузку файла (поскольку при вызовах ajax вы сами обрабатываете ответ)
Вот пример странице, решая вашу проблему old-school.
Обратите внимание на использование элемента <Form>
с id="excelDownloadForm"
на странице. У него нет атрибута runat="Server"
.
После Asp. Net мы привыкли иметь только одну форму (runat = "Server") на страницу. Но на самом деле у вас может быть несколько форм на странице HTML, и вы можете публиковать разные пакеты данных на разных конечных точках.
Единственный недостаток в этом - то, что вы не можете обработать успешный ответ и показывать модальное при передаче завершено.
Пожалуйста, дайте мне знать, что вы думаете об этом подходе, и если он поможет.
(Примечание: полностью протестировано и работает)
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="jquery.js"></script>
</head>
<body>
<form id="excelDownloadForm" action="API/MyService.asmx/DownloadExcel" method="post" target="_self" >
<input type="hidden" name="fileName" id="fileName" />
</form>
<form id="form1" runat="server">
<div>
<script>
var FileName = "test.xlsx"
$("#fileName").val(FileName);
$("#excelDownloadForm").submit();
</script>
</div>
</form>
</body>
</html>