2010-06-02 2 views
2

좋아, 나는이 주제들을 잘 이해했다고 생각했지만, 그렇지 않은 것 같아서, 여기 누군가가 이것을 정리할 수있다.ASP.NET AJAX weirdness

Page.IsAsync가 손상된 것 같습니다. 항상 false를 반환합니다.

하지만 ScriptManager.IsInAsyncPostBack이 작동하는 것 같습니다.

UpdatePanels 내부의 컨트롤에 대한 왕복 중 true를 반환합니다. 이것은 좋은 일이다. 부분 포스트 백인지 아니면 일반 포스트 백인지 확인할 수 있습니다.

그러나 ScriptManager.IsInAsyncPostBack은 비동기 페이지 메소드에 대해 false를 반환합니다. 왜 이런거야? 그것은 일반적인 포스트 백이 아니며, 페이지에서 공용 정적 메서드를 호출하고 있습니다.

AutoPostBack = false 인 컨트롤이있는 경우 자체 포스트 백을 트리거하지 않지만 페이지에 이벤트 핸들러가있는 경우 해당 이벤트 처리기 코드가 값이 변경된 경우 다시 게시가 수행 된 방식에 관계없이 다음 다시 게시를 실행합니다. 즉 드롭 다운을 조정 한 다음 버튼을 누르면 해당 드롭 다운의 핸들러 코드가 실행됩니다. 이것은 Page Method 호출 중에도 발생한다는 점을 제외하고는 괜찮습니다. 그리고 차이점을 알 수있는 방법이 없습니다.

의견이 있으십니까?

+0

2 년이 지났습니다. 너는 아마도 대답을 선택해야한다고 생각하지 않니? 또는 답변에 대한 의견? –

답변

0

이것은 ASP.NET Ajax와 ASP.NET 콜백이 서로 다른 두 가지이며 다르게 구현되기 때문입니다. 불행히도 Page.IsAsync와 ScriptManager.IsInAsyncPostBack을 모두 사용해야합니다.

+0

그래,하지만 내가 Page.IsAsync는 항상 false를 반환하는 것 같았다. – LoveMeSomeCode

+0

Page.IsAsync는 콜백을 사용하는 경우에만 true입니다. 페이지 메서드는 ASP.NET Ajax의 일부이기도합니다. –

0

Page.IsASync 아마 페이지가 페이지 지시문에 비동기로 설정되었는지 여부를 반환

<%@ Page Language="vb" Async="true" ... 

당신은 모든 단일 제어 동작 후 다시 게시하지 않도록 AutoPostBack을 플래그가, 그래서 사용자가 할 수있는 전체 양식을 채운 다음 포스트 백을 작성하고 모든 관련 코드를 트리거하십시오.

정말 이상하지는 않지만 서버 쪽 코드가 항상 클라이언트 쪽과 동기화되도록이 방법으로 디자인되었습니다. 따라서 페이지에서 드롭 다운 목록을 선택하고 포스트 백이 발생하면 해당 드롭 다운 목록 변경이 포스트 백을 트리거 한 컨트롤과 함께 자체 코드를 실행합니다. ASP .Net 페이지 수명주기에 대해 더 자세히 읽으십시오. 그것은 나를 위해 훨씬 더 명확한 것들을 만들었습니다.

+0

내가 다시 게시 할 때 실행중인 이벤트 처리기 코드는 정상입니다. 내 주요 불만은 내가 비동기 페이지 메서드에 있다는 사실에 대한 가시성이없는 것 같다. 폼에서 뭔가를 수행하고 내 페이지에서 정적 메서드를 호출하는 일부 JS를 트리거했습니다. - 이것이 실제 포스트 백이 아니기 때문에 특정 작업을 수행 할 수있는 기능을 원합니다.이 사실을 알 수있는 방법이 없습니다. . – LoveMeSomeCode

2

Tjaart가 지적했듯이 Page.IsAsync는 AJAX와 아무 관련이 없습니다! IsAsync에 대한 자세한 내용은 MSDN을 참조하고 비동기 페이지에 대한 자세한 설명은 http://msdn.microsoft.com/en-us/magazine/cc163725.aspx을 참조하십시오.]

페이지 메소드는 다른 이름의 웹 서비스입니다. ScriptManager는 필요한 JS 보일러 플레이트를 방출하여 웹 서비스를 매우 쉽게 호출하는 XHR을 만들지 만 모든 ScriptManager가이 작업을 실제로 수행해야합니다.

MSDN 페이지 에서처럼 ScriptManager.IsInAsyncPostBack은 요청이 "부분 렌더링 모드"인 경우에만 true가되므로 페이지 메서드를 실행할 때 ScriptManager.IsInAsyncPostBack이 false가됩니다. 요청이 a로 생성되지 않았기 때문입니다. 부분적으로 다시 게시 한 결과 (즉, 내용을 새로 고치는 UpdatePanel).

JS에서 페이지 메서드를 호출 한 결과로 서버 측 이벤트 처리기가 실행되고있는 것 같습니다. AFAIAA, 자바 스크립트 을 사용하여 페이지 메소드를 호출해도 페이지가 정상적인 페이지 수명주기을 거치지 않아야합니다. 따라서 페이지 load, init 등이러한 이벤트는 실행되어서는 안됩니다. 그래서 그것은 이상합니다.

제안 : -

참조 ANZ의 의견과 데이브의 응답 여기 encosia.

Anz와 비슷한 문제가있을 수 있습니까? 즉, 페이지 메소드가 호출되었지만 귀하의 페이지가 즉시 게시됩니다.