2008-11-10 7 views
2

DropDownList의 데이터가 컨트롤에로드/바인딩되었을 때 사용할 수있는 클라이언트 이벤트가 있습니까? 이런 일이 생길 때 나는 그들의 편에서 이벤트를 일으킬 필요가있다.DropDownList의 ASP.Net 클라이언트 이벤트?


기본적으로, 나는 둔화가있는 것처럼 데이터가로드되는 동안 컨트롤을 잠글 시도하고 (흔히) 사용자가 데이터를 입력 시작할 수 있으며 입력하는대로 다음 초점을 잃게됩니다.

태그에서이 작업을 시도했지만 거기에있는 메소드가 첫 번째 포스트 백 이후에 작동을 멈추는 것처럼 보입니다! (도움을 주시면 큰 도움이됩니다). 해결 방법으로 이벤트를 요소 자체에 첨부하려고 시도했지만 onchange 이벤트를 사용하여 잠금 작업을 수행하는 동안 데이터가 성공적으로로드되면 잠금 해제 할 수 없습니다.

아이디어가 있으십니까? 지금까지 해답을 주셔서 감사합니다 :)

답변

3

데이터가 서버 측에 바인딩되므로 특정 이벤트에 대한 클라이언트 측 이벤트가 없지만 페이지가 렌더링되고 데이터가 거기에 있으므로 클라이언트 측 이벤트를 실행할 수 있습니다. 클라이언트 스크립트를 document.load 이벤트에 사용하거나 jQuery의 document.ready 이벤트와 같은 것을 사용합니다. 이렇게하면 페이지가 바인딩 된 드롭 다운을 포함하여로드가 완료되면 스크립트가 실행됩니다.

1

제이슨은 이러한 이벤트가 발생할 때 클라이언트에게 "알릴"수 없다는 점에서 정확합니다. 당신이 할 수있는 한가지는 Page.RegisterStartupScript() 메소드를 호출하여 페이지 로딩이 끝나면 자바 스크립트로 무엇인가를 수행하는 것입니다 (데이터 바인딩을 완료 한 포스트 백이 발생했다는 가정). 다시 말하지만, 이것은 서버 측과는 반대로 데이터 바인딩이 완료되면 클라이언트 측에서 무언가를하고 싶다고 가정합니다.

1

응용 프로그램에서 ASP.NET AJAX를 사용할 수 있습니까? 그렇다면 드롭 다운 목록을 채우는 동안 "처리"텍스트를 표시 할 수있는 모달 대화 상자를 열어 선택한 이벤트를 열 수 있습니다. 그렇게하면 사용자는 다른 컨트롤에 액세스 할 수 없으며 걱정없이 필요한 것을 할 수 있습니다.

+0

건배,하지만 난 $ (문서) .ready() 메소드를 사용하여 고정. 변경은 blockUI 메소드를 트리거하고 포스트 백이 완료되면 블록 해제됩니다. – Damien

0

나는 내 웹 사이트의 마스터 페이지에서 다음 코드를 사용합니다. 이렇게하면 사용자가 완전히 바운드되기 전에 컨트롤을 사용하지 못하게됩니다. 나는 컨트롤이 완전히 바인딩되지 않은 경우 (느린 연결) 페이지가 폭발하는 것을 발견했습니다.

본질적으로 스크립트는 해당 페이지가 완료되지 않은 경우 게시를 하이재킹합니다. 페이지 처리가 완료 될 때까지 사용자가 아무 것도하지 못하도록합니다. 나는 1 년 전에 이것을 썼다. 그리고 그것은 매우 편리하게왔다.

  1. 먼저

  2. 신체의 전대 블록이 추가() setdopostback 위해 온로드 본체 태그 세트.

    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); 
         }  
        } 
    
관련 문제