2013-04-29 1 views
0

좋아, 특히 혼란스러운 문제가있어, 그것을 고치기위한 최선책이 무엇인지 모르겠다. asp.net 페이지에 단추가 있고 버튼 처리기 (즉, 즉각적인 제어/수정 기능 이외의 이유로) 가끔 완료하는 데 시간이 걸릴 수 있습니다. 핸들러의 끝에서 Response.Redirect 호출이 있습니다. 사용자가 단추 처리기를 실행하는 동안 새로 고침을 누르면 단추 누르기 (양호) 처리기를 실행 한 후 Response.Redirect를 처리하지 않고 페이지를 다시로드합니다.새로 고침을 누르면 ASP.Net Response.Redirect가 무시됩니다.

나는 이것이 단지 일어난 일이라는 것을 알기 위해 날마다 걸렸지 만, 일단 알아 낸 후에는 정말 간단한 샘플 코드로 그것을 재현 할 수있었습니다. 나는, (4 .NET으로 대상) VS 2010의 새로운 C# .NET 웹 프로젝트를 만든 홈 페이지에 버튼을 추가 :

<asp:button id="btnSubmit" runat="server" OnClick="btnSubmit_Click" text="Submit"/> 

다음 단지 (제공하기 위해 10 초 동안 잠을 핸들러 코드를 추가 나에게 시간) 새로 고침을 칠 :

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    Thread.Sleep(10000); 
    Response.Redirect("about.aspx"); 
} 

그리고 충분히 있는지를 - 나는 단추 처리기 실행을 허락한다면, 그것은) 예상대로 분명히 (미세 리디렉션,하지만 난 그 십초 Thread.sleep를하는 동안 새로 칠 경우 리디렉션은 무시됩니다.

Response.Redirect가 따르도록 강제하는 방법을 찾아야합니다. 나는 사용자가 Refresh를 누르는 것에 의해 트리거되는 Page_Load 이벤트에서 이것을 처리해야한다는 느낌이 들었다. (즉, "handling_button"과 같은 세션 변수가 생성되거나, 확인하고, 리디렉션되거나 리디렉션 위치에 도달하면 페이지로드가 제거됩니다.)하지만 여기에 누락 된 부분이있어 좀 더 우아합니다.

답변

1

f5을 누르면 브라우저가 현재 페이지를 포기하고 현재 주소를 새로 요청합니다.

나는 당신이하려는 것을위한 깨끗한 해결책이 없다고 생각합니다.

자바 스크립트는 window.onbeforeunload 속성을 가지고 있지만 여기서는 작동하지 않을 것이라고 생각합니다. 다시로드가 요청 될 때 탐색 이벤트가 이미 시작 되었기 때문입니다.

요청이 아직 이루어 졌는지 여부를 감지 할 수있는 원본 페이지에서 테스트하는 것이 유일한 해결책 인 것 같습니다.

폼 제출시 자바 스크립트 이벤트 처리기를 사용하여 회 전자도 표시하는 데 도움이 될 수 있습니다.

+0

그건 내가 두려워하는 것입니다. 이상하게도 나는이 문제를 가진 사람을 찾을 수없는 것 같아서, 다른 사람들이 내가 원래 한 것을 결론 지었다고 믿고 다른 누군가가 좀 더 우아한 해결책을 가지고 있는지 확인하지 않고 수정을 구현했다. :/나는 사용자 경험이 아무런 징후가 아니라해도 대다수의 사용자가 방금 새로 고침을하지 못하도록 막지는 않겠지 만 최소한 스피너를 추가 할 것입니다. – WearySky

+0

서버 측 페이지 생성 중에 장시간 계산을 수행하는 것은 일반적으로 권장되지 않는 접근 방법이며 이는 대다수 사람들이이 문제가 발생하지 않은 이유입니다. 일반적인 접근 방식은 작업을 대기열에 넣거나 웹 서버가 신속하게 반환 할 수 있도록 별도의 서비스 처리를 수행하는 것입니다. – recursive

+0

글쎄, 온라인 상점 (우리가 소스를 얻었고, 직접 만들지 않았으며)을 계산하는 과정이며, 명령을 제출하는 데 많은 시간이 걸린다.주문이 생성 될 때까지 영수증 페이지로 사용자를 리디렉션하고 싶지 않지만 다른 해결책은 사용자를 삽입 광고 주문 처리 페이지로 보내어 사용자가 자신이 생각하기 때문에 새로 고침하는 것을 방지하는 것입니다. 시간 초과 또는 기타 냉동. – WearySky