2010-04-03 4 views
1

지금까지이 문제에 대해 약간의 당황 스러움을 가지고있는 여러분 중 일부는 내 문제에 대한 조언을 드릴 수 있기를 바랍니다.비동기 UpdatePanel 포스트 백을 사용할 때 전체 페이지가 Chrome 및 Firefox에서 다시로드되는 이유는 무엇입니까?

저는 IE에서 잘 돌아가는 AJAX-enhanced 웹 사이트를 개발했습니다. Chrome 및 Firefox를 1 년 정도 사용하십시오. Timer 컨트롤을 사용하여 30 초마다 수신 메시지를 확인하고 잠재적 인 새 메시지를 표시하는 UpdatePanel을 업데이트합니다.

내 Firefox 사용자 중 몇 명이 30 초마다 페이지를 새로 고침한다는 불만을 토로합니다. 나는 내 자신이이 행동을 재현 할 수는 없지만 "30 초"- 설명을 주면 나는 타이머 해결책을 범인으로 저주했다.

하지만 지금은이 오류가 Firefox에서 발생한 것이 아니라 Google 크롬에서 직접 경험하고 있습니다. (그리고 내 두 대의 컴퓨터 중 하나에서만!) 매 30 초마다 페이지가 다시로드됩니다! 그러나 나는 Timer와 관련이 있다는 것을 발견했습니다. 왜냐하면 UpdatePanels 내의 서버에 대한 다른 모든 비동기 포스트 백이 전체 페이지를 다시로드하기 때문입니다.

이 오류는 필자의 경험으로는 Internet Explorer에서 경험하지 못했습니다.

내가 말했듯이, 이것은이뿐만 아니라 타이머 포스트 백 관련,하지만 아무도 관심의 경우 코드는 다음과 같다 : 나는 클라이언트 측에 문의 웹 사이트의 다른 장소에서

<asp:Timer runat="server" ID="MailCheckTimer" Interval="30000" OnTick="MailChecker_Tick"></asp:Timer> 

<asp:UpdatePanel runat="server" ID="MailCheckerUpdatePanel" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <div class="newmail_box" runat="server" id="newmail_box"> 
      <!-- Content stripped for this example --> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="MailCheckTimer" /> 
    </Triggers> 
</asp:UpdatePanel> 

__doPostBack UpdatePanel과 관련하여 자바 스크립트에서 직접 함수. 이 호출의 일반적인 동작은 참조 된 UpdatePanel을 일부 내용으로 업데이트하는 것이지만 이제는 Chrome에서 전체 페이지를 새로 고칩니다. (그러나 다시하지 일관되게, 결코 IE에서)

(패널 내부) 클릭 버튼 후 내용을 새로 고침 같은 심지어 가장 기본적인 된 UpdatePanel 작업을 완전히 다시로드 페이지를 강제로 :

<asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click"></asp:Button> 

그리고 저를 더욱 괴롭히기 위해, 저는 공개 웹 사이트에서만 경험할 수 있습니다. 지역 개발 환경이 아니라 실제 원인을 찾아내는 것이 지루한 일입니다! :(

이런 일이 발생하는 이유가 뭘까요? 왜 그렇게 일관성? 내 UpdatePanel 디자인과는 그것을 했습니까? 또는 일부 비동기 된 UpdatePanel 콜백을 방지 파이어 폭스/크롬에서 일부 보안 설정을합니까?

어떤 도움 또는 아이디어는 매우 감사

+0

안녕하세요, http : // blogs.visoftinc.com/archive/2007/09/23/asp.net-ajax-updatepanel-not-working-common-problems.aspx와 프로덕션 서버에서 오류가 발생했는지 확인하십시오. – keyboardP

+0

제안 해 주셔서 감사합니다. 아래 답변에 설명 된대로 권한 부여 논리에서 원인을 찾았습니다 ... – Alex

답변

2

OK 내가 그것을 고정이 독자를 연결 미래의 머리에 대한 가치, 여기에 무엇을 위해 내가 통해 무슨 일이 있었는지!.. 내가 TenaciousImpy에 의해 제안 http://blogs.visoftinc.com/archive/2007/09/23/asp.net-ajax-updatepanel-not-working-common-problems.aspx에서 문서를 읽을

재미있는 생각. 그것은 보였다, 나는 시험해 보았다. xhtmlConformance 특성을 아무 효과없이 Transistional로 변경하십시오. 또한 validator.w3.org에서 우수한 XHTML Validator Service로 내 콘텐츠의 유효성을 검증하려고 시도했지만 HTML을 모양에 맞게 만들 때 기분이 좋았지 만 문제가 해결되지 않았습니다. Chrome에서 오류를 재현 할 수 있습니다. 즉, 모든 게시물이 전체 페이지를 새로 고침한다는 의미입니다. (

그리고 나서 순수한 기회에 의해 우연히 가장 자극적 인 버그의 원인을 알 수 있습니다 ?) 나는 승인 논리가 그런 식으로 생각하지 않는 등 받침대에서 호출되었다는 것을 알아 차렸다. 예! ... 마침내 내 탈모증의 원인을 신속하게 찾을 수있는 단서.

Google 크롬 및 Firefox는 특정 웹 사이트에 대한 로그인 정보를 기억하도록 설정되어있는 경우 모든 게시물과 함께 이러한 정보를 보냅니다. 나는 일반적으로 다음과 같이 그들을 위해 서버에이를 보내고, 확인 :

string usern = Request["loginusername"] as string; 
string password = Request["loginpassword"] as string; 

if (!String.IsNullOrEmpty(usern) && !String.IsNullOrEmpty(password)) 
{ 
     Authenticate(usern, password, Request["rememberme"] != null); 
} 

글쎄, 나는 일찍 내 MasterPage에서 이러한 매개 변수에 대한 확인, 그들이 존재한다면 나는 사용자가 로그인 요청을 제출 가정. 나는 사용자를 인증했고 프로그래밍의 편의를 위해 동일한 페이지를 사용자에게 리디렉션했다 (즉, 로그인 된 형식으로 페이지를 새로 고치고 로그인 컨트롤을 제거).

30 초마다 똑딱 거리는 Ergo My Timer에는 사용자의 로그인 기본 설정으로 콜백 매개 변수가 확장되어 Chrome 또는 Firefox에서 최신 로그인과 비밀번호를 기억하도록 설정했습니다.

이 솔루션은 이후 간단하고 명백합니다. 지금은 익명 사용자 내 인증 로직을 호출이는 크롬과 파이어 폭스에서 로그인 - 기본 메모리를 지원하는 내 사이트를 허용

if (Session["user"] == null) // Check parameter indicating a logged in user 
{ 
     string usern = Request["loginusername"] as string; 
     string password = Request["loginpassword"] as string; 

     if (!String.IsNullOrEmpty(usern) && !String.IsNullOrEmpty(password)) 
     { 
     Authenticate(usern, password); 
     } 
} 

.

관련 문제