Я пытаюсь разместить действие, которое произойдет после отображения всей страницы .aspx. «Действие» - это функция, которая использует объект Response для отправки файла пользователю.
Более подробная информация:
Я пытаюсь повторить поведение ссылки на странице с боковой панели. И.Е. У меня есть ссылка на главной странице для действия «Экспорт», и она отлично работает - поскольку страница уже отображается до того, как пользователь щелкнет по ней. Но когда пользователь находится на боковой панели и щелкает ссылку, он должен вернуть его на эту главную страницу, а затем отправить файл после его отображения.
Я провел некоторое исследование и подумал, что использование события PageComplete было бы хорошо для этого, поэтому я создал свой обработчик событий и поместил вызов в код экспорта (он отключает строку запроса при загрузке с боковой панели) внутри моего обработчика событий PageComplete. Но он ведет себя точно так же - всплывающее окно загрузки браузера и страница никогда не загружается до или после.
Если это поможет понять, что я здесь делаю, это фрагмент кода, используемого для отправки списка пользователю.
Response.Clear();
Response.BufferOutput = true;
Response.ContentType = "application/ms-excel";
Response.AppendHeader("content-disposition", "attachment;filename=MyList.xls");
Response.Write(listManager.ExportLists(mycode));
Response.End();
Я бы предпочел способ использовать событие страницы для загрузки страницы, а не возиться с этой логикой. Но если есть чистый и простой способ отправить файл и он позволяет загрузить страницу, а затем отправить файл, это тоже подойдет.
Есть ли другое событие Page, которое я могу использовать, кроме PageComplete, или возможно я что-то упустил?
РЕДАКТИРОВАТЬ: Извините за многословие. Я понимаю, что не могу изменить способ работы HTTP-запросов - я только ищу приемлемое решение, которое достигает более или менее одинаковых результатов. Похоже, что можно пойти через принудительное обновление страницы через пару секунд (таким образом, гарантируя, что она загружается до выполнения кода загрузки файла) - поэтому я ищу способ сделать это в качестве первого ответа предлагает - обновить до загрузки. (Это тоже не нужно откладывать, если есть способ обновить без ожидания)
Почему этот код не работает?
private void Page_LoadComplete(object sender, System.EventArgs e)
{
if (Request.QueryString["action"] != null)
{
if (Request.QueryString["action"] == "export")
{
Response.Redirect("MyHome.aspx?action=exportnow", false);
}
if (Request.QueryString["action"] == "exportnow")
{
ExportMasterList();
}
}
}
Что он должен делать: после завершения загрузки страницы сделать Response.Redirect, перезагрузив себя с другой строкой запроса. Когда он снова достигает события Page LoadComplete, во второй раз он запускает функцию, которая записывает файл.
Что он на самом деле делает: по-видимому, повторяет одну и ту же проблему дважды ... возвращается к той же самой проблеме, как выполнить действие после загрузки страницы или подождать, пока страница полностью не загрузится, а затем запустить обновление, которое выполнит действие? Нет ли способа, чтобы ASP.NET мог что-то сделать сам, не нажимая на что-нибудь?
Если это так, то автоматическое обновление через 2 секунды также будет приемлемым ... но я не уверен, как это сделать.