закрытие окна после Response.End

например У меня есть форма с ListView, которая находится в режиме редактирования.
Что-то происходит, и таблица, которую использует Listview, становится недоступной.
Я просто хочу иметь возможность закрыть окно, если пользователь нажмет "Сохранить". '.

In Page_Load, проверяю свободна ли таблица, если нет, то звоню RegisterClientScriptBlock(type,name,"window.close()"). Однако обработка все равно происходит, и она идет на ListView1_ItemUpdating event.

В Page_Load, если таблица не существует, я могу вызвать Response.End, чтобы остановить обработку, однако окно по-прежнему остается открытым, поскольку скрипт никогда не регистрировался.

Любой способ остановить обработку и закрыть окно, не устанавливая пользовательскую проверку IsTableValid() во всех моих методах?


person eych    schedule 16.11.2010    source источник
comment
Вы пробовали использовать Response.Flush?   -  person ryudice    schedule 16.11.2010


Ответы (4)


Ответ, предоставленный Одедом, не работает с Page_Load, я не знаю почему. Ответ, предоставленный eych, работает. Тем не менее, если вы не хотите хранить дополнительный html-файл и делать перенаправление, вы можете использовать что-то вроде:

Response.Clear();
Response.Write("<script>window.close();</script>");
Response.Flush();
Response.End();
person Radu Simionescu    schedule 11.04.2013

Flush ответ на отправку всех данных в браузер перед его завершением:

RegisterClientScriptBlock(type,name,"window.close()")
Response.Flush()
Response.End()

Вы можете Clear получить ответ перед регистрацией. сценарий, чтобы гарантировать, что в буфере ответа больше ничего нет.

Существуют также методы ClearHeaders и ClearContent, если вы хотите очистить только один, а не другой.

person Oded    schedule 16.11.2010
comment
попробовал это, но он все равно оставляет пустое окно. (также пробовал очистить) - person eych; 16.11.2010
comment
@eych - Как выглядит исходный код HTML? Вы получаете какие-либо ошибки javascript? Некоторые окна не могут быть закрыты с помощью скрипта (например, обычно, только если вы открыли окно с помощью скрипта, вы также можете закрыть его с помощью скрипта). - person Oded; 16.11.2010
comment
окно изначально было открыто с помощью скрипта, и ошибок javascript нет. У меня есть отдельная кнопка «Закрыть», которая при нажатии также вызывает тот же метод RegisterClientScript(...), и это работает, закрывая форму [я думаю, поскольку после Button_Click больше нет обработки]. - person eych; 16.11.2010
comment
@Oded - Какой источник? Источник пустого окна? Если вам нужен исходник оригинала, то он на другой машине. Что-то особенное вы ищете? - person eych; 16.11.2010
comment
@eych - Если вы получаете пустую HTML-страницу, на которой ничего нет, значит, скрипт не был выведен на страницу. Я хочу подтвердить это, вот и все. - person Oded; 16.11.2010
comment
да, там пусто...‹!DOCTYPE...›‹HTML›‹HEAD›‹/HEAD›‹BODY›‹/BODY›‹/HTML› - person eych; 17.11.2010
comment
@eych - попробуйте использовать Response.Write(‹script type=\text/javascript\›window.close();‹/script›); возможно, RegisterClientScriptBlock игнорируется из-за завершения ответа. - person Shadow Wizard Wearing Mask V2; 17.11.2010

одно решение, kludgey, но может быть использовано в другом месте:

Response.Redirect("close.html")

где close.html только что

  <script>
  window.close();
  </script>
person eych    schedule 16.11.2010

Попробуйте это вместо этого:

HttpContext.Current.ApplicationInstance.CompleteRequest();

Сами Microsoft говорят, что Response.End есть только для обратной совместимости:

Этот метод предоставляется только для совместимости с ASP, то есть для совместимости с технологией веб-программирования на основе COM, которая предшествовала ASP.NET.

Не уверен, что это решит вашу проблему, но, по крайней мере, у Microsoft не будет оправдания .. :)

person Shadow Wizard Wearing Mask V2    schedule 16.11.2010