2009-11-05 3 views
1

페이지 열기시 일부 로딩 시간을 얻기 위해 일부 아약스 호출을 삽입하려고하는 asp.net 웹 사이트가 있습니다.C# 및 JQuery, 포스트 백에서 이상한 동작

시나리오 : A.aspx 페이지에서 저는 jQuery $ (document) .ready() 이벤트를 사용하여 ajax() 메서드를 통해 ajax 호출을 트리거합니다. ajax 호출은 B.aspx 페이지를 대상으로 (동일한 사이트에서) HTML의 일부를 렌더링하여 결국 A.aspx의 기존 마크 업에 삽입합니다.

그 후 ajax 호출은 더 이상 __dopostback 이벤트를 발생시킬 수 없습니다. 사실 A.pasx 페이지의 기존 컨트롤을 클릭하면 페이지 다시 게시를 수행해야합니다. B.aspx 페이지가 대신 열립니다.

B.aspx를 다른 응용 프로그램 풀에서 실행되는 다른 사이트로 이동하려고 시도했지만 A.aspx의 __dopostback 호출이 여전히 B.aspx를 열려고합니다.

 
    
    $(document).ready(function() { 
     $.ajax({ 
      type: "GET", 
      url: "./B.aspx", 
      data:"username=xxx", 
      dataType: "text", 
      error: function(XMLHttpRequest, textStatus, errorThrown){ 
       $('#agentResultErrorContainer').html('Error... ' + errorThrown); 
      }, 
      success: function(data){ 
       $('#agentsResultContainer').html(data); 
      } 
     }); 
... 
... 
... 
    } 

기타 자세한 사항 :

여기에 전화입니다 사이트 B.aspx 무엇을 렌더링 않는 .NET 2.0 플랫폼

답변

0

에서 실행? 웹 폼이라면 __dopostback의 후크가 B.aspx를 가리 키도록 업데이트되므로 예상되는 동작 일 것입니다.

1

여기에서 수행하는 방식에 따라 두 가지 뷰 상태, 두 가지 형식 (이름과 ID가있는 두 가지 형식), JavaScript 함수 등이 있습니다 (this similar question 참조). 그건 그렇고, app-pool과 아무 상관이 없습니다. 모든 것이 클라이언트 쪽에서 발생합니다.
또한 성공적인 다시 게시를하더라도 다양한 예외가 발생할 수 있습니다.

해결책? 하지 마. MVC로 옮길 수 있습니다. 더 편한 곳이라면 b.ashx (일반 핸들러)을 만들고, 포스트 백이없는 깨끗한 HTML을 반환하며, 자바 스크립트를 사용하여 로직을 처리하거나 게시되는 필드를 사용할 수 있습니다 ~ a.aspx. (입력 필드를 추가하고 Request.Form을 사용하여 읽을 수 있습니다).

또 다른주의 사항 : - 그들은 여전히로드 페이지를 기다릴 필요가, 그리고도 느린 될 가능성이 나는이 방법은 당신에게 더 나은 사용자 경험을 얻을 것이다 의심한다. 내가 다른 질문에서 준 것과 똑같은 충고를하겠다. 사용자 컨트롤은 가장 간단한 해결책이다.

+1

나는 Kobi에 동의하며, 이중 컨트롤 때문에 포스트 백 오류가 발생했습니다. 나는 Kobi가 서버 측 마크 업없이 제안한대로 .ashx를 만드는 것을 고려할 것이다. 이렇게하면 문제가 해결됩니다. Kobi는 AJAX 호출에 대해 유효한 점을 제기했습니다. 먼저 Jquery가 호출 (DOM이 완전히로드되었음을 의미)을로드해야하고 두 번째로 서버에 대한 두 번째 왕복을 기다려야합니다. 그 페이지. – dooburt

0

@ 코비 @David : 설명해 주셔서 감사합니다. async-called 페이지에도 양식과 viewstate 복제본이 있었으며 원래의 마크 업에 분명히 주입되어 엉망이되었습니다.

@ 코비 : MVC와 같은 다른 패러다임으로 옮겨가는 것이 분명 더 효과적 일 것입니다.하지만 불행히도 지금까지는이 모든 작은 변화를 시도해 볼 수 있습니다.

0

같은 도메인에 두 페이지를 떠나 가정, 내가 제안 다음 "."

$ 아약스 url 속성 "./B.aspx"과 관련하여
  1. 이있는 필요한? 필자는 완전한 상대 경로 (예 : "/B.aspx"자체)를 사용하는 데 익숙합니다.

  2. 디버거를 작동시키고 A.aspx와 B.aspx 모두에 대해 Page_Load에 중단 점을 배치 해 보셨습니까? 요청이 어디에서 발생하고 어떤 일이 일어나고 있는지 추론하는 데 도움이 될 수 있습니다.

  3. Firebug (Firefox 용) 또는 Web Developer Tools (IE8 용)와 같은 플러그인을 사용하고 있습니까? 이러한 도구는 자바 스크립트 오류를 ​​정확히 찾아내는 데 도움이됩니다. 페이지에서 Javascript 오류가 발생하면 스크립트가 비정상적으로 종료 되었기 때문에 향후 자바 스크립트 기능 (예 : __DoPostback)이 발생하지 않을 수 있습니다.

희망 사항이 도움이 되길 바랍니다.

관련 문제