#c# #asp.net
#c# #asp.net
Вопрос:
У меня есть кнопка, которая вызывает событие click для загрузки изображения. В моем событии click у меня есть некоторый код для изменения моего отображения при появлении диалогового окна сохранения. Проблема, с которой я сталкиваюсь, заключается в том, что когда появляется диалоговое окно, оно останавливает выполнение предыдущей строки кода. Как я могу проверить, что мой код был выполнен перед вызовом функции?
Вот мой обработчик события кнопки и функция:
protected void btnSave_Click(object sender, EventArgs e)
{
var _title = txtTitle.Text;
txtTitle.Text = string.Empty;
txtDescription.Text = string.Empty;
ChangeDisplay();
if (Request.Browser.Browser == "IE")
lblSnapShot.Visible = (lblSnapShot.Visible) ? false : true;
SaveSnapShot(_title);
}
void SaveSnapShot(string _title)
{
try
{
FileInfo _fileToDownload = new FileInfo(_path);
Response.Clear();
Response.ContentType = "image/png";
Response.AppendHeader("Content-Disposition", "attachment; filename="" _title ".png"");
Response.WriteFile(_fileToDownload.FullName);
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
catch (System.Exception ex)
{
ChangeDisplay();
if (Request.Browser.Browser == "IE")
lblSnapShot.Visible = (lblSnapShot.Visible) ? false : true;
Response.Write("SAVE FAILED n Error: " ex.Message);
}
}
Комментарии:
1. единственное,
response.write
что я вижу, это когда «Не удалось сохранить». Не могли бы вы немного подробнее объяснить свой вопрос.2. @rockinthesixstring Прошу прощения за расплывчатость вопроса. Заголовок моего вопроса должен был быть Response . Файл записи. В событии click не выполняется весь код, предшествующий вызову функции saveSnapshot();. Похоже, что ответ. Файл записи останавливает обработку этого кода. Если я закомментирую вызов функции, будет выполнен весь код в событии click.
3. и у Response.End() та же проблема, что и у CompleteRequest()?
4. Да, у Response.End() та же проблема.
5. вы пробовали добавить ответ. Flush() непосредственно перед завершением запроса?
Ответ №1:
Ответ.WriteFile не останавливает обработку другого кода (этот код появляется еще до того, как вы вызываете WriteFile, так как же это могло произойти?)
Однако ваш метод saveSnapshot отправляет обратно в браузер изображение вместо обычного ответа в формате HTML. На каждый запрос из браузера вы можете отправить только один ответ — вы не можете отправить обратно файл изображения и обновить HTML одновременно.
Комментарии:
1. Я думал о том же, но когда я комментирую вызов, другой код обрабатывается просто отлично.
2. правильно. обычно, ASP.NET сгенерирует и отправит обратно HTML. когда вы вызываете Response. Файл записи, вы переопределяете это и сообщаете ASP.NET вместо этого отправить обратно файл. вам нужно заставить браузер пользователя (через javascript) сделать отдельный запрос к вашему веб-приложению, и в отдельном запросе вы должны вызвать Response. Файл записи.
3. Спасибо. Можете ли вы привести мне пример создания отдельного запроса. Надеюсь, я не задаю глупый вопрос. Я некоторое время боролся с этим, и сейчас мой мозг работает с низкой скоростью.