Добрый день. Разрабатываю метод на 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 указан обработчик с кодом выше - всё работает, браузер загружает пользователю сгенерированный файл, как и в случае выше.
Но на начальном проекте загрузка файла не начинается. В чём может быть проблема ? Заранее благодарю всех потративших своё время на ответы.