2014-04-23 2 views
4

이전 deverlopers 코드와 통합하려고 시도한 VB .net 응용 프로그램이 있습니다. 코드는 우편 번호를 사용하여 Google지도 캔버스에서 위치와 함께 매장 목록을 반환합니다.vb.net. strict 모드와 관련된 자바 스크립트 문제

한 가지 예외는 있지만 위 프로세스는 훌륭하게 작동합니다.

나는 내부적으로 나의 첫번째 성향이 창을 만들려면 다음

function Sys$WebForms$PageRequestManager$_doPostBack(eventTarget, eventArgument) { 
     var event = window.event; 
     if (!event) { 
      var caller = arguments.callee ? arguments.callee.caller : null; 
      if (caller) { 
       var recursionLimit = 30; 
       while (caller.arguments.callee.caller && --recursionLimit) { 
        caller = caller.arguments.callee.caller; // ERRORS HERE 
       } 
       event = (recursionLimit && caller.arguments.length) ? caller.arguments[0] : null; 
      } 
     } 
    ... 

했다가

__doPostBack('userControlSearchResults_results', LatLng); 

에 다음과 같은 오류 내가 범인을 격리 한

JavaScript runtime error: Accessing the 'caller' property of a function or arguments object is not allowed in strict mode.

를 얻을. 그래서 그것을 통해 if (! event)를 전달하고 계속 진행합니다. 코드에서 __doPostback을 호출하는 다른 시간이 있으므로 성공합니다.

그러나 JavaScript가 제한되어 있으므로 잘못하고 있거나 다른 접근 방식을 찾아야합니다.

이 문제를 조사한 결과 아주 조금 돌아 왔습니다. 일반적인 대답은 '엄격한 사용'을 주석 처리하는 것입니다. 그리고 계속 전진해라.

문제는 우리가 자바 스크립트 라이브러리을 많이 끌어와 그들 중 많은 사람들이 지금

사람이 제안 또는이 문제를 해결하는 방법에 대한 아이디어가 있습니까 '엄격한 사용'으로 설정되어있다?

블로그에서 __doPostback 호출 전에 setTimeout()을 적용하려고 시도했습니다. 그러나 어떻게 해결되는지는 모르겠다.

편집 : 더 많은 코드가 추가되었습니다.

__doPostback는

<form id="Form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<div id="Container" style="zoom:1" onclick=""> 
    <asp:UpdatePanel runat="server" ID="udpResults" OnLoad="UpdatePanel1_Load"> 
     <ContentTemplate> 
      <asp:HiddenField ID="currentLatLong" runat="server" /> 
      <asp:HiddenField ID="triggerSearch" runat="server" Value="0" /> 
      <asp:HiddenField ID="searchString" runat="server" Value="0" /> 

      <asp:HiddenField ID="locationCode" runat="server" /> 
      <asp:HiddenField ID="locationDesc" runat="server" /> 
      <asp:HiddenField ID="locationPhone" runat="server" /> 
      <asp:HiddenField ID="locationZip" runat="server" /> 

      <asp:HiddenField ID="filterPickup" runat="server" /> 
      <asp:HiddenField ID="filterVirtualKiosk" runat="server" /> 
      <asp:HiddenField ID="filterDelivery" runat="server" /> 
      <asp:HiddenField ID="filterAcceptsCash" runat="server" /> 
      <asp:HiddenField ID="filterKey2Key" runat="server" /> 
      <asp:HiddenField ID="filterHODService" runat="server" /> 

      <asp:Label ID="tblResults" runat="server"></asp:Label> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
</form> 

이 도움을합니까 이상의 코드가 요구 될 경우 내 업데이트 패널은 사용자 컨트롤 내에이 같은 보이는 ... 다음 자바 스크립트

function CompleteSearch(returnedLatLng) { 

    if (returnedLatLng != '') { 
     alert("dopostback here2- this is where it breaks"); 
     __doPostBack('ucSearchResults_udpResults', returnedLatLng); 
     if (document.getElementById("sidebar_search")) { document.getElementById("sidebar_search").style.display = "none" }; 
     if (document.getElementById("sidebar_login")) { document.getElementById("sidebar_login").style.display = "none" }; 
     if (document.getElementById("promo1")) { document.getElementById("promo1").style.display = "none" }; 
     document.getElementById("sidebar_results").style.display = "block"; 
     //document.getElementById("sidebar_results").style.display = "none"; 
    } 
    return false; 
} 

내 . 나는 지금 정말로 붙어있어서 어디로 가야할지 모른다.

+0

나는이 __doPostBack 자바 스크립트 코드가 어떤 개발자에 의해서 수행 된 것이라고 생각하지 않는다. ASP 엔진이 그것을 생성한다고 생각한다. 난 당신이 ASP 코드를 게시해야한다고 생각, 어쩌면 이러한 userControlSearchResults_results. – xavigonza

+0

정확합니다. Sys $ Web ... 엔진에 의해 생성됩니다. 그러나 "caller = caller.arguments.callee.caller"라는 줄이 오류를 트립합니다. 이 코드는 이전의 고전적인 ASP 웹 사이트에서 작동합니다. 나는 새로운 사이트와 통합하려고 시도하고있다. __doPostBack 프로세스를 검토합니다. –

답변

0

나는이 Sys $ WebForms $ PageRequestManager $ _doPostBack 자바 스크립트 코드가 모든 개발자에 의해 수행 된 것으로 생각하지 않는다. ASP 엔진이 생성한다고 생각한다. ASP 코드, 아마도이 userControlSearchResults_results 함수의 코드를 게시해야한다고 생각합니다.

__doPostBack을 사용하는 방법에 대한 여러 게시물이 있습니다. 올바르게 사용하는지 확인하십시오. window.event를가 null이 포함 된 경우

How to use __doPostBack()

2

이 문제가 발생합니다.

자바 스크립트 타이머 이벤트에만 null이 포함되어있는 것으로 나타났습니다.
어쩌면 다른 특수 이벤트에도 null이 포함되어있을 수 있습니다.

두 가지 해결책이 있습니다.

솔루션 A : 타이머 이벤트에

1/:이 요소 이벤트에 대한 이벤트 처리기에 클릭
2 /와 같은 사용자 인터페이스 요소 이벤트를 상승 :

여전히있다 __doPostBack 전화 함정.
이벤트 객체를 만들고 요소에서 실행할 수 있다고 생각할 수 있습니다.
이 작업은 가능하지만 window.event에는 여전히 null이 포함됩니다.
이상하게 보입니다.하지만 의도적으로 설계된 것 같습니다.

요소 이벤트를 트리거하고 null 대신 이벤트를 포함하는 window.event를 갖는 유일한 방법은이 요소 click 메소드를 호출하는 것입니다.

솔루션 B :

UpdatePanel는 입력 TYPE = "제출"요소가 포함되어있는 경우에는, 비동기 게시를 수행 __doPostBack를 호출 할 필요가 없다.
이 요소 클릭 방식을 호출하는 것이 충분합니다. UpdatePanel이 입력이 요소를 제출하지 포함되어있는 경우

, 타이머 이벤트 핸들러는 하나를 생성하고 사용할 수 있습니다

["yourNiceLittleScriptManagerControlID"] = "yourNiceLittleUpdatePanelID|timer_dummy_button" 
["__EVENTTARGET"] = "" 
["__EVENTARGUMENT"] = "" 
["timer_dummy_button"] = "what you like" 
:

비동기 포스트 백에
var btn = document.createElement('INPUT'); 
btn.setAttribute('name', 'timer_dummy_button'); 
btn.setAttribute('type', 'submit'); 
btn.setAttribute('value', 'what you like'); 
btn.setAttribute('style', 'display:none;'); 
document.getElementById('yourNiceLittleUpdatePanelID').appendChild(btn); 
btn.click(); 

는 Page.Request.Form 이러한 항목을 포함 할 것

관련 문제