2009-11-13 2 views
1

웹 응용 프로그램을 만들고 있습니다. 업데이트 패널에 이상한 오류가 발생했습니다.ASP.Net의 자동 포스트 백입니다. 너무 느릴 때 어떻게됩니까?

두 개의 업데이트 패널이 있으며 각 업데이트 패널에 텍스트 상자가 있습니다. 이러한 텍스트 상자는 모두 자동 포스트 백이며 업데이트 패널은 조건부로 업데이트됩니다.

글쎄, 서버에서 요청을 처리 할 때 사용자보다 빠르지 않다면 서버에서 클라이언트 쪽에서 무시되는 것처럼 보입니다. 이 텍스트 상자 중 하나에 무언가를 입력하고 다음 탭으로 빠르게 이동하여 무언가를 입력하고 탭 아웃하는 것처럼 말입니다. 이로 인해 2 개의 포스트 백이 야합니다.

글쎄, 1 포스트 백이 서버에서 처리되고 다른 포스트잇이 발생하면 어떻게 될까요? 그 게시물은 서버 측 또는 클라이언트 측에서 삭제됩니까?

이 상황에서 관찰하고있는 주된 문제는 포스트 백이 처음으로 발생하면 업데이트 패널에 Update()가 있다는 것입니다. 음, 두 번째 포스트 백이 첫 번째 인터럽트를 발생하면 업데이트 패널 (다른 패널)의 업데이트도 수행합니다. 사용자가 매우 빠르게 탭을 돌리거나 (서버의로드가 높거나 다른 경우) 두 번째 업데이트 패널이 업데이트되지만 처음 업데이트되지는 않습니다.

TL; DR : 후 다시 다시 다른 게시물을 중단하면 (두 번째 포스트 백 사람이 있지만), 다시 첫 번째 게시물에 업데이트가 가정 된 모든 업데이트 패널을 업데이트되지 않습니다

방법 이 문제를 해결하거나 해결할 수 있습니까? 사용자가 현재 제어하고있는 컨트롤이 다른 많은 문제와 함께 포커스를 잃어 버리기 때문에 화면의 모든 업데이트 패널을 업데이트 할 수 없습니다.

답변

3

UpdatePanels 포스트 백을 가로 채서 XMLHTTPRequest 객체를 사용하여 서버에 다시 요청합니다 (예 : AJAX 사용).

두 번째 XMLHTTPRequest는 두 번째 XMLHTTPRequest가 진행될 때 진행중인 경우 첫 번째 XMLHTTPRequest를 취소합니다. 이것은 내가 아는 한 표준 행동입니다.

업데이트를 각 텍스트 상자의 이벤트에 첨부하는 것과는 대조적으로 UpdatePanels 업데이트를 단추 클릭으로 함께 사용하려는 경우가 있습니다 (blur 이벤트에 첨부 된 것처럼 들릴 수 있음).이렇게하면 새 요청이 진행중인 요청을 취소하는 것을 방지하기 위해 많은 요청이 수행되지 않도록하고 요청이 진행되는 동안 버튼을 비활성화 할 수 있습니다.

편집 : 하나 개의 요청이 PageRequestManagerisInAsyncPostBack 속성을 확인하여 이미 진행되는 동안

당신은 다른 요청을 방지 할 수는 형태로 클라이언트 측 만들어지고. 다음과 같은 것

function pageLoad(sender, args) { 

var pageManager = Sys.WebForms.PageRequestManager.getInstance(); 

// add a function to execute when an asynchronous postback is initialized 
pageManager.add_initializeRequest(checkAsyncPostback); 

} 

function checkAsyncPostback(sender, arg) 
{ 
    var pageManager = Sys.WebForms.PageRequestManager.getInstance(); 
    // check if an async postback is already in progress 
    if (pageManager.get_isInAsyncPostBack()) { 
     // cancel this async postback if one is currently in progress 
     arg.set_cancel(true); 
    } 
} 

포스트 백이 중단되면 서버 측에서 쉽게 알 수있는 방법이 없습니다.

+0

글쎄, 실제로 그렇게하지 않으려합니다. 포스트 백이 서버 측에서 중단되었음을 감지하는 방법이 있습니까? – Earlz

0

페이지에서 UpdatePanels 및 요청/응답을 어떻게 관리하는지 모르므로 귀하의 질문에 구체적으로 답변을 드릴 수 없습니다. 그러나 피들러 (Fiddler)로 전화를 추적 할 경우 진행 상황을 쉽게 알 수 있습니다. 요청이 발사 될 때 당신이 볼 수 있고, HTTP 오류 코드가 다시 전송됩니다 또는 예외가 슬로우되는 경우 응답을 볼뿐만 아니라, 수 등 : UpdateProgress 컨트롤을 사용하여에

Fiddler2

0

봐 : http://www.asp.net/ajax/documentation/live/overview/UpdateProgressOverview.aspx

또한 UpdatePanels는 이러한 종류의 과도한 공격입니다. 페이지 메서드 (Google ASP.NET 페이지 메서드)를 사용하여보십시오

EDIT :이 방법이 더 유용 할 것임을 명확히하려면 UpdateProgress 컨트롤에서 ProgressTemplate의 내용을 모달 방식으로 수정하여 사용자가 요청이 완료 될 때까지 아무 것도 할 수 없습니다.

+0

@it은 과잉 임 : 예 간단한 예를 들어 있습니다. 그러나 이것은 거대한 응용 프로그램입니다. 그것이 과용은 아님을 나에게 믿어 라 – Earlz

+0

그것은 이해할 수있다. =) 그런 경우에는 ProgressTemplate이 모달 형식으로 나타나도록 UpdateProgress 컨트롤을 사용하는 것이 좋습니다. – zincorp

관련 문제