@c4ptain_h3mp

Как решить проблему: Response не возвращает .docx для скачивания в браузер пользователя?

Добрый день. Разрабатываю метод на ASP.NET-WebForms. Суть такова: пользователь нажимает кнопку, на фронте формируется часть данных, которые передаются в обработчик на back. В обработчике выбираются дополнительные данные, открывается шаблон .docx, редактируется средствами OpenXML и содержимое полученного файла записывается в MemoryStream, который нужно вернуть в Response пользователю. Вот код обработчика без редактирования самого документа, объявления и инициализации переменных.
//Объявление и инициализация переменных
byte[] FileBytes = File.ReadAllBytes(Template);
using (MemoryStream stream = new MemoryStream(FileBytes))
{
    using (WordprocessingDocument myDoc = WordprocessingDocument.Open(stream, true))
    {
        MainDocumentPart mainPart = myDoc.MainDocumentPart;

        foreach (SdtElement obj in mainPart.Document.Body.Descendants<SdtElement>().ToList())
        {
            foreach (Text t in obj.Descendants<Text>().ToList())
            {
                switch (t.Text)
                {
                    //.... редактирование файла .docx
                }
            }
        }
        myDoc.MainDocumentPart.Document.Save();
        myDoc.Close();
    }

    context.Response.Clear();
    context.Response.ClearHeaders();
    context.Response.ClearContent();

    context.Response.AddHeader("content-disposition", "attachment; filename=\"" + DocName + ".docx\"");
    context.Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
    context.Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");

    stream.Seek(0, SeekOrigin.Begin);
    context.Response.BinaryWrite(stream.ToArray());
}

context.Response.Flush();

Код функции JS:
function save_word_doc(id_btn) {
// ... here is code that gets params from default page data

jQuery.post("DataHandler.ashx?CN=" + vCN + "&CommandName=SaveWord&auctionID=" + oFormRecord.auctionID
    + "&user_login=" + user_login
    + ....
    + "&amount=" + oFormRecord.value.amount
    + "&percent=" + percent);
}

Данный код проверял на начальном проекте ASP.NET WebForms ,изначально на возможность сохранения сгенерированного файла хотя бы локально - работает, файл сохраняется на локальную машину (сервер) без повреждений.
Так же собрал данный функционал на ASP.NET-MVC с данным кодом обработчика C#, который вызывается с LinkButton, в котором в PostBackURL указан обработчик с кодом выше - всё работает, браузер загружает пользователю сгенерированный файл, как и в случае выше.
Но на начальном проекте загрузка файла не начинается. В чём может быть проблема ? Заранее благодарю всех потративших своё время на ответы.
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы