Вопрос

Следующий код не будет корректно выполняться в IE7 с установленными последними пакетами обновления.

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Disposition", "attachment;filename=Contacts.xls");
response.ContentType = "application/octet-stream";

System.Text.UnicodeEncoding Encoding = new System.Text.UnicodeEncoding();

byte[] unicodeBytes = {255,254};
int length = 2 + Encoding.GetByteCount(_exportContent); // _exportContent is string.
response.AddHeader("Content-Length", length.ToString());
response.OutputStream.Write(unicodeBytes, 0, 2);
unicodeBytes = Encoding.GetBytes(_exportContent);
response.OutputStream.Write(unicodeBytes, 2, unicodeBytes.Length);
response.End();

Я открываю страницу aspx с помощью js (window.open()) и выполняю приведенный выше код в Page_Load().

Странная вещь заключается в том, что всплывающее окно пытается загрузить / показать диалоговое окно файла, а затем вы слышите звук, похожий на то, что всплывающее окно заблокировано (хотя блокировщик всплывающих окон деактивирован!).

Дополнительная информация:
- Такое поведение происходит как на XP, так и на W2k3 (который является реальным веб-сервером без чего-либо еще установленного, кроме IE7 и FW 3.5 SP1 и последних пакетов обновления.) - Тот же код отлично работает с FW 2.0 - У Firefox нет проблем с отображением диалогового окна файла.

Мне было бы любопытно, сталкивался ли кто-нибудь еще с такой же проблемой и мог бы предложить решение для того, чтобы заставить эту штуку работать в IE7.

Ваше здоровье,
Dimi

Это было полезно?

Решение

Добавьте заголовок, сообщающий IE явно чтобы КЭШИРОВАТЬ файл.IE имеет известные ошибки, связанные с невозможностью правильного сохранения файла, если он отправляется как файл без кэша.

Другие советы

У меня была такая же проблема, и я провел час в крайнем расстройстве.Как обычно, причиной всех головных болей являются браузеры Microsoft IE.В других браузерах все работало нормально.Решение простое:Пользователю нужно будет настроить настройку IE7, перейдя в "Инструменты"> "Свойства обозревателя"> Вкладка "Безопасность" > Для "Интернет" и / или "Локальная интрасеть" измените параметры безопасности, нажав кнопку "Пользовательский уровень ..."

Перейдите на узел "Загрузки"> Автоматическое запрашивание загрузки файлов"> установите флажок "Включить"

Это исправило ситуацию для моих пользователей.

Надеюсь, это поможет.

Была эта проблема в нашей интрасети, автоматическое запрашивание загрузок у меня не работало (уже было выбрано), но это сработало...

Инструменты -> Свойства обозревателя

На вкладке Безопасность выберите ‘Локальная интрасеть’, затем нажмите Сайты

Нажмите Дополнительно

Введите “http://your.url.com” и нажмите Добавить

Нажмите Закрыть -> Ок -> Ok

надеюсь, это сработает и для вас тоже ;)

Я все еще не могу заставить диалоговое окно не исчезать.Это происходит, когда приложение обращается к [вебметоду] для сбора информации для передачи на страницу, которая пытается загрузить результаты в Excel.

            Response.Clear();

            Response.ClearHeaders();
            Response.ClearContent();

            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileNameToUse + "\"");
             Response.CacheControl = "Public";

            Response.Write(output);
            Response.Flush();
            Response.Close();

Похоже, это также происходит только при доступе к веб-сайту с использованием IP-адреса (999.11.1.111\default.aspx....).Это работает при доступе к нему через loacalhost\default.aspx

Чтобы проверить, не является ли безопасность причиной этой проблемы, установите для целевого параметра значение _self.Должна появиться панель предупреждения в верхней части IE.Если причина в этом, проверьте безопасность IE.В частности, приглашение к загрузке части.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top