ASP.NET, jQuery, грязные формы и window.onbeforeunload

Можно добавить bindingRedirect элемент к конфигурационному файлу для определения, какую версию блока Вы хотите использовать во времени выполнения.


   
      
         
            
            
         
      
   

12
задан Community 23 May 2017 в 12:23
поделиться

4 ответа

Вы всегда можете создать унаследованный класс страницы, у которого есть собственный метод OnLoad / OnUnload, который добавляет в немедленный запуск javascript.

Тогда вам не нужно обрабатывать его на уровне управления а скорее уровень формы / страницы.

2
ответ дан 2 December 2019 в 21:23
поделиться

Интересно, но... почему бы вам не сделать все с jQuery?

var  defaultSubmitControl = false;
var  dirty = false;
$(document).ready(function( ) {
    $('form').submit(function( ) { dirty = false });
    $(window).unload(function( ) {
        if ( dirty && confirm('Save?') ) {
            __doPastBack(defaultSubmitControl || $('form :submit[id]').get(0).id, '');
        }
    });
});
···
dirty = true;
···

Теперь, если это все еще вызывает ту же самую проблему (выгрузка срабатывание перед отправкой), вы можете попробовать другое дерево событий , так что вместо прямого вызова __doPostBack вы делаете...

setTimeout(function( ) {
    __doPastBack(defaultSubmitControl || $('form :submit[id]').get(0).id, '');
}, 1);  // I think using 0 (zero) works too

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

2
ответ дан 2 December 2019 в 21:23
поделиться

Я тоже присматриваю за этим, но на данный момент я нашел решение, которое использует все элементы управления html вместо веб-элементов управления asp.net, вы думаете об этом?

  <script type="text/javascript">
    $(document).ready(function () {
      $("form").dirty_form();
      $("#btnCancel").dirty_stopper();
    });             
  </script>
0
ответ дан 2 December 2019 в 21:23
поделиться

Это работает, в основном отслеживая положение мыши. Имейте в виду, что вы все еще можете получить положительные значения для вашего значения Y (отсюда моя строка кода < 50), но пока ваши кнопки отправки находятся более чем на 100 пикселей вниз, все должно быть в порядке.

Вот Javascript, который я добавил для отслеживания изменений мыши и захвата события onbeforeunload:

    <script language="JavaScript1.2">
    <!--

    // Detect if the browser is IE or not.
    // If it is not IE, we assume that the browser is NS.
    var IE = document.all?true:false

    // If NS -- that is, !IE -- then set up for mouse capture
    if (!IE) document.captureEvents(Event.MOUSEMOVE)

    // Set-up to use getMouseXY function onMouseMove
    document.onmousemove = getMouseXY;

    // Temporary variables to hold mouse x-y pos.s
    var tempX = 0
    var tempY = 0

    // Main function to retrieve mouse x-y pos.s

    function getMouseXY(e) {
      if (IE) { // grab the x-y pos.s if browser is IE
        tempX = event.clientX + document.body.scrollLeft
        tempY = event.clientY + document.body.scrollTop
      } else {  // grab the x-y pos.s if browser is NS
        tempX = e.pageX
        tempY = e.pageY
      }  
      // catch possible negative values in NS4
      if (tempX < 0){tempX = 0}
      if (tempY < 0){tempY = 0}  
      // show the position values in the form named Show
      // in the text fields named MouseX and MouseY
      document.Show.MouseX.value = tempX
      document.Show.MouseY.value = tempY
      return true
    }

    //-->
    </script>


    <script type="text/javascript">

        window.onbeforeunload = HandleOnClose;

        function HandleOnClose(e) {

            var posY = 0;
            var elem = document.getElementsByName('MouseY');
            if (elem[0]) {
                posY = elem[0].value;
            }

            if (posY < 50) {    // Your form "submit" buttons will hopefully be more than 100 pixels down due to movement
                return "You have not selected an option, are you sure you want to close?";
            }
        }

    </script>

Затем просто добавьте следующую форму на свою страницу:

    <form name="Show">
        <input type="hidden" name="MouseX" value="0" size="4">
        <input type="hidden" name="MouseY" value="0" style="display:block" size="0">
    </form>

И готово! Можно было бы немного почистить (удалить MouseX и т. д.), но это сработало в моем существующем приложении ASP.net 3.5, и я подумал, что опубликую, чтобы помочь кому-нибудь. Работает в IE 7 и Firefox 3.6, Chrome еще не пробовал.

1
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: