2008-09-04 3 views
2

VB와 Ajax를 사용하는 웹 응용 프로그램이 있습니다. 나는 서버에 대한 포스트 백 (postback)에서 "깜박 거림"을 피하기 위해 updatepanels를 사용하고있다.버튼 컨트롤을 두 번 클릭해야하는 이유는 무엇입니까?

나는 현재 패널을 볼 수 없게하고 형제 패널을 볼 수있게 해주는 버튼 컨트롤 (바깥으로 이동하여 치명적인 오류가 발생하여 왼쪽에 둡니다)을 updatepanel 자체 내에 정의하고 싶습니다. 이 버튼은 버튼을 두 번 클릭해야한다는 점을 제외하고는 작동합니다. 두 번 클릭하지는 않았지만 다시 한 번 클릭했습니다.

중단 점 설정에서 버튼에 연결된 코드가 실제로 첫 번째 클릭에서 실행되지만 실제로 패널이 전환되지 않는다는 것을 발견했습니다. 같은 버튼을 클릭하거나 다른 버튼을 클릭하면 예상되는 두 번째 패널의 동작이 나타납니다. 그러나 두 번째 버튼을 클릭하면 원치 않는 보너스가 세 번째 패널에 표시되고 세 번째 패널은 두 번째 버튼이 클릭되어 표시됩니다.

이 동작은 updatepanel 및 Ajax 특성으로 인한 것입니다. 두 번째 클릭을 피할 수있는 방법이 있습니까? 업데이트 패널을 잘못 사용하고 있습니까? 모달 팝업 (AjaxToolKit에서 바로)을 사용하고 싶었지만 데이터를 게시하는 데 문제가있어서이 방법을 선택했습니다. 이것이 나를 충분히 오랫동안 괴롭 혔기 때문에 어떤 통찰력, 도움, 비판조차도 환영받을 것입니다. 감사합니다

답변

1

당신이 UpdatePanels를 제거한다면 PostBacks에서 예상대로 작동합니까? 기회는 Page_Load 또는 다른 이벤트에서 무언가를합니다. 체인이 클릭 이벤트에 도달하기 전에 어떤 방식 으로든 '재설정'됩니다. 이것이 사실 일 수 있습니까?

0

이전에이 문제를 해결하고 해결했지만 어떻게 기억할 수 없습니까? 내 오래된 코드를 찾아서 다시 해보겠습니다. 한가지 생각해 보니 스크립트 매니져에서 EnablePartialRendering을 사용할 수 있습니까? 어쩌면 세 번째 패널에서 두 컨테이너를 모두 래핑 해보십시오.

0

업데이트 패널이 다른 패널 안에 있습니다.

그 반대의 경우가 있습니까? 업데이트 패널 내의 AFAIK 컨트롤 만 AJAX 호출을 통해 업데이트됩니다.

1

나는 당신의 문제는 업데이트 패널이 메소드 실행 후 서버로부터 데이터를 수신하고 있다는 것입니다. 변경할 패널은 업데이트 패널 외부에 있으므로 속성이 변경된 것을 알지 못합니다.

전체 페이지 다시 게시를 수행하거나 업데이트 패널에서 수정할 패널이 있어야합니다.

0

다음은 매우 간단한 해결책입니다. (나는 오늘 아침에 같은 문제를 겪고 있었다.)

UpdatePanel은 외부에서 물건을 렌더링 할 수 없다. 따라서, 눈치 채 셨던 것처럼 업데이트가 진행되고 있지만 결과가 표시되지 않습니다.

가장 쉬운 해결책은 전체 다시 게시를 강제하는 것입니다. 이 같은이 작업을 수행 할 수 있습니다

protected override void OnInit(EventArgs e) 
{ 
    var scriptManager = ScriptManager.GetCurrent(this); 
    // or this.Page in a UserControl, etc. 

    scriptManager.RegisterPostBackControl(someButton); 
    scriptManager.RegisterPostBackControl(someOtherButton); 
    // etc. for each control that needs to update something outside the UpdatePanel 
} 

이 여전히 자신이 아약스하여 UpdatePanel에서 업데이트 할 수있는 버튼 (예를 들어, 비활성화 또는 활성화에 자신의 상태를 변경) 할 수 있습니다. 전체 포스트 백은 버튼을 클릭 한 경우에만 발생합니다.

0

다른 사람들은 업데이트 패널이 내용을 업데이트한다고 말했지만, 사용하는 것이 가장 큰 장점 중 하나입니다.

버튼 클릭 방식이 작동하려면 Panel2와 pnlPrvCmt가 업데이트 패널 내에 있어야합니다. 또 다른 옵션은 Panel2를 하나의 업데이트 패널에 넣고 pnlPrvCmt를 두 번째 업데이트 패널에 넣는 것입니다. UpdateMode = Always (기본적으로) 인 경우 두 Update 패널 내부의 모든 컨트롤은 새로 고침을 발생시킵니다.

0

동적 제어가 생성되면 ID를 부여하십시오.
어떤 이유로이 .net에서 동적 컨트 롤이이 컨텍스트에서 작동해야합니다.

myControl.id="newID" 
0

나는 2 개의 다른 scenerios에서 발생하는이 발견 :

  1. 제어 없음 ID를 설정합니다. 동적 컨트롤을 만들 때 ID가 마크 업에서 제외되거나 ID가 설정되지 않았습니다. ASP.Net은 ID를 사용하여 조치를 추적합니다.

  2. 중첩 된 UpdatePanels. Scenerio : Masterpage를 사용할 때 페이지의 내용에 UpdatePanel이 필요 없도록 UpdatePanel로 래핑하는 내용 자리 표시자가있을 수 있습니다. 그런 다음, 페이지를 개발할 때 습관으로 UpdatePanel을 추가 할 수 있습니다.

관련 문제