Заставляет подсказать окно загрузки IE - PullRequest
2 голосов
/ 25 февраля 2011

У меня проблема с некоторыми отчетами в приложении. Я выполняю мануализацию.

У меня есть кнопка, которая выполняет обратную передачу на сервер и выполняет некоторую информацию, а затем возвращается к клиенту иоткройте всплывающее окно, чтобы загрузить отчет.

    private void grid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 ...
 ClientScript.RegisterClientScriptBlock(this.GetType(), "xxx", "<script>javascript:window.location('xx.aspx?m=x','xxx','width=750,height=350,directories=no,location=no,menubar=no,scrollbars,status=no,toolbar=no,resizable=yes,left=50,top=50');</script>");
}

Затем в xxx.aspx у меня есть код:

 Response.ClearContent();
 Response.ClearHeaders();
 Response.TransmitFile(tempFileName);
 Response.Flush();
 Response.Close();

 File.Delete(tempFileName);

 Response.End();

Это прекрасно работает, если опция IE Автоматическая подсказка для файлазагрузка включена.Но по умолчанию это отключено, и мне нужно заставить окно загрузки выдавать подсказки.

Могу ли я что-либо сделать без изменения большого количества кода?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 25 февраля 2011

Это дизайн Internet Explorer.Переключатель говорит IE не показывать диалоговое окно, если пользователь не щелкнет правой кнопкой мыши и не выберет «Загрузить» из меню.

С этим ничего нельзя поделать.

Источник:

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

1 голос
/ 25 февраля 2011

Я делал это в прошлом, похоже, работает. Я предполагаю, что вы пытаетесь передать файл, который существует на жестком диске ...

Версия1
В вашем обработчике событий Page_Load. Добавьте это ... (пример в VB)

'Prepare page for a file download 
Response.ContentType = "application/x-msdownload"
Response.AddHeader("content-disposition", "attachment; filename=thefilename.ext")
Response.WriteFile(pathToFile)

Этот код использовался для возврата пользователю файла Excel.

Версия 2 (код взят из старого проекта)
В событии нажатия кнопки на сервере

    Dim Results As New DataSet()
    Results.DataSetName = "SearchExport"

    Dim SearchTable As DataTable     
    Dim sFileName As String = "SearchExport.xls"

    Response.ContentType = "application/x-msexcel"
    Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", sFileName))
    SearchTable = GetTheSearchResults()
    SearchTable.TableName = "SearchResults"
    Results.Tables.Add(SearchTable)

   ' This example takes the xml and converts it to HTML using XSLT, replace this with  your string of data that should be returned. Or put Response.WriteFile() instead.
    Response.Write(ConvertToString(Results.GetXml))
    Response.End()

Версия 2 этого ответа является копией / вставкой из другого проекта, он не выполняет то, что вам нужно, но вы должны быть в состоянии заполнить пробелы. (т.е. удалить временный файл и т. д.)

1 голос
/ 25 февраля 2011

Существует заголовок, который будет отображать окно загрузки.Попробуйте добавить заголовок Content-Disposition, чтобы вызвать его:

Content-Disposition: attachment;имя файла = fname.ext

0 голосов
/ 25 февраля 2011

Установка соответствующих заголовков и использование метода BinaryWrite будут работать ...

string filePath = "the path to your file";

byte[] fileData = MethodToReadBinaryContentsOfFile(filePath);

Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = null;
Response.AddHeader("Content-Disposition", "attachment;filename=the name to save the file as");
Response.ContentType = "binary/octet";
Response.BinaryWrite(fileData);

System.IO.File.Delete(filePath);

Response.End();
0 голосов
/ 25 февраля 2011

попробуйте использовать

window.open вместо window.location

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...