События клиента ASP.Net в DropDownList? - PullRequest
2 голосов
/ 10 ноября 2008

Есть ли клиентское событие, которое я могу использовать, когда данные DropDownList были загружены / привязаны к элементу управления? Мне нужно вызвать событие на их стороне, когда это произойдет.


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

Я пытался сделать это в тегах, но методы, расположенные там, перестали работать после первого постбэка! (Любая помощь там будет принята с благодарностью). В качестве обходного пути я попытался прикрепить события к самим элементам, и хотя это работает для блокировки, используя событие onchange, я не могу разблокировать его при успешной загрузке данных!

Есть идеи? Спасибо за ответы до сих пор :)

Ответы [ 4 ]

3 голосов
/ 10 ноября 2008

Так как данные будут связаны на стороне сервера, у вас нет события на стороне клиента для этого конкретного события, однако, если страница отрисована, данные будут там, поэтому вы можете запустить свой клиент сценарий в событии document.load или использование чего-то вроде события document.ready в jQuery. Это приведет к запуску вашего скрипта после завершения загрузки страницы (включая выпадающий список).

1 голос
/ 13 ноября 2008

Можете ли вы использовать ASP.NET AJAX в вашем приложении? Если это так, вы можете иметь выбранное событие, открывающее модальное диалоговое окно, в котором вы можете отображать ваш «обрабатывающий» текст во время заполнения выпадающего списка. Таким образом, у пользователя нет доступа к другим элементам управления, и вы можете делать то, что вам нужно, без беспокойства.

1 голос
/ 10 ноября 2008

Джейсон здесь прав, потому что вы не можете «уведомить» клиента, когда происходит такое событие. Одна вещь, которую вы могли бы сделать, это вызвать метод Page.RegisterStartupScript (), чтобы сделать что-то с JavaScript, как только страница закончит загрузку (и предположительно, что произошла обратная запись, которая выполнила привязку данных). Опять же, это предполагает, что вы хотите что-то сделать на стороне клиента после завершения привязки данных, а не на стороне сервера.

0 голосов
/ 11 марта 2009

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

По сути, скрипт перехватывает пост обратно, если эта страница еще не завершена. Позволяет пользователю ничего не делать, пока страница не закончит обработку. Я написал это год назад, и это очень удобно.

  1. сначала установите тег тела загрузки на setdopostback ()

  2. добавьте это в блок скрипта в теле.

        var boolDoPostBack = false;
    
        if (__doPostBack)
        {
           // save a reference to the original __doPostBack
           var __oldDoPostBack = __doPostBack;
    
          //replace __doPostBack with another function
          __doPostBack = AlwaysFireBeforeFormSubmit;
        }
        function setdopostback()
        {
            boolDoPostBack = true;
        }
        function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument)
        {
            var x= document.readyState
    
            if (x != "complete")
            {
                if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded")
                { 
                    //do nothing with IE postback
                }
                else if (!boolDoPostBack)
                {
                    //do nothing with FireFox postback
                }
                else
                {
                    //alert('Allow Postback 1');
                    return __oldDoPostBack (eventTarget, eventArgument);
                }
            }
            else
            {
                //alert('Allow Postback 2');
                return __oldDoPostBack (eventTarget, eventArgument);
            }       
        }
    
...