2013-08-21 4 views
0

У меня есть кнопка «Выход» на странице aspx, на которой нужно выполнить код на стороне сервера, а затем закрыть окно браузера. Кнопка имеет событие OnClick и событие OnClientClick. Событие OnClientClick вызывает метод, который должен выполнить обратную передачу, а затем закрыть окно. Код работает отлично в IE, но не будет делать postback в Chrome. Окно закрывается в обоих случаях. Вот мой код. Я проверяю, чтобы увидеть, какой браузер это, но не делать ничего другого в каждом конкретном случае в этой точке__doPostBack не работает в Chrome

function closeMainWindow(control) { 
      var clientIDName = control.name; 
      if (navigator.userAgent.indexOf('Chrome') != -1) { 
       __doPostBack(clientIDName, ''); 
        window.open('', '_self', ''); //need this for Chrome 
        window.close(); 
        return false; 
      } 
       else { 
       __doPostBack(clientIDName, ''); 
       window.open('', '_self', ''); //bypasses warning from IE 
       window.close(); 
       return false; 
      } 

Вот код для кнопки.

<asp:Button ID="btnExit" runat="server" Text="Yes" Width="50px" OnClick="btnExit_Click" OnClientClick="javascript:return closeMainWindow(this);" /> 

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

+0

Есть ли ошибка в консоли Javascript в Chrome? – Oscar

+0

Я что-то упустил или логика не идентична для Chrome и не-Chrome в вашем опубликованном коде? –

+0

Я думаю, что попытка закрыть окно, не будучи уверенным, что ваш запрос POST полностью обработан, - плохая идея. Если вы не хотите реализовывать некоторые серверные js, как, например, @YuriyGalanter, вы должны полагаться на некоторую асинхронную отправку сообщений js, например, с помощью плагина jQuery Form (http://malsup.com/jquery/form/) – jbl

ответ

2

Вам не нужно выполнять «window.close()» onClientClick, удалите этот код на стороне клиента. Выполните обычную обратную передачу без «__doPostBack()», и внутри этого кода обратной почты на стороне сервера отправьте «window.close();» назад к клиенту через «ClientScript.RegisterStartupScript»

+0

Я пробовал этот подход с этой линией. Он выполняет, но не закрывает окно. ClientScript.RegisterStartupScript (GetType(), "cwin", "window.close();"); –

+0

Вы должны передать еще один параметр: 'ClientScript.RegisterStartupScript (GetType()," cwin "," window.close(); ", true);' - это приведет к созданию правильных тегов SCRIPT вокруг кода JS –

+0

Works Great !! ! Спасибо за вашу помощь. –