2014-08-28 2 views
1

GIS 맵 관련 함수에 제 3 자 컨트롤을 사용하고 있습니다. 자바 스크립트 내에서 C# 메서드를 호출해야했습니다. 이 같은 PageMethods 사용하기로 결정했습니다 : 당신은 내가 마우스의 좌표를 전달하고이 방법에서는 [WebMethod]WebMethod에서 포스트 백 강제 적용

에 방법을 변환 할만큼 매력처럼

PageMethods.getFeature(x,y) 

작품을 그리고 그것은 나에게지도를 반환 풍모. 지도에서 강조 표시하겠습니다.

연구에서 내가 [WebMethod] 내부에서 UI에 직접 액세스 할 수 없다는 것을 알았 기 때문에 세션 변수와 포스트 백을 설정하기로 결정했습니다. 세션 변수가있는 경우 다시 게시 할 때 필요한 UI가 변경됩니다.

WebMethod은 다음과 같습니다

[WebMethod(EnableSession = true)] 
     public static void getFeature(float x, float y) 
     {... 
     some code in here. 
     } 

업데이트 이 내 JQuery와이다 : 나는 WebMethod의 내부에 다시 ​​게시를 강제로 어떻게

<script> 
     $(document).ready(function (e) { 
      $(".MyMap").click(function (e) { 
       var posX = $(this).position().left; 
       var posY = $(this).position().top; 
       PageMethods.getFeature(e.pageX-posX, e.pageY-posY); 
       }); 
     }); 
    </script> 

. 포스트 백을 알고있는 대부분의 방식은 작동하지 않습니다.

+0

브라우저는 서블릿에서 서버로 양식을 게시 할 수 없습니다 아르 자형. 이것은 클라이언트 측 작업입니다. 웹 서비스에서 응답을 받으면 다시 게시를 발생시키는 JavaScript를 작성할 수 있습니다. –

+0

@BenRobinson 그건 좋은 지적이야 ... 흠. javascript는 MouseClick 이벤트를 가져오고 이미지가 클릭 된 위치를 파악하는 데 사용됩니다. 그건 C#에서 메서드에 전달됩니다. 'WebMethod'를 사용하지 않고 이것을 달성 할 수있는 다른 방법이 있습니까? JavaScript 함수 jQuery 사용하고 있습니다. – logixologist

+0

jQuery ajax 호출의 결과로 어떤 것을하고 싶습니까? MVC 및 웹 API 컨트롤러는 아약스 요청을 처리 할 수 ​​있으며 웹 API는 특히 강력하고 유연합니다. –

답변

0

올바른 방향으로 나를 도와 주신 @BenRobinson에게 특별히 감사드립니다. 여기에 내가 생각해 낸 것이있다. 비슷한 실수를 저지르는 다른 사람들을 위해이 글을 올리고 있습니다. 짧은 대답은 다음과 같습니다 ** ** You Want

내 주요 문제 [WebMethod]을 사용하여 내 C# 코드를 jQuery에서 호출 할 수있었습니다. UI에 액세스해야 할 때까지 완벽하게 작동했습니다. 기술적으로 'WebMethod'는 웹 서비스를 호출하는 것과 거의 같습니다. 원격 웹 서비스 UI를 업데이트 할 수 없습니다. 당신이 할 수있는 일은 [WebMethod]을 호출하는 jQuery에서 함수를 실행 한 후에 새로운 페이지 (window.location)를 호출하는 것입니다. 그 위치는 원래 페이지를 호출 할 수 있습니다 (내 경우 Default.aspx). 요청 필드에서 UI에 보낼 매개 변수를 전달했습니다. 기본적으로로드 할 때 특정 요청 변수를보고 나서 뭔가 할 수 있다는 코드를 넣었습니다. 매력처럼 작동했습니다.

여기에 거친 예입니다 : 내가 이런 짓을 내 jQuery를 페이지에서 (새 페이지로 이동합니다) :

protected void Page_Load(object sender, EventArgs e) 
      { 
       int x = 0; 
       double y = 0; 
       x = Int32.Parse(Request["x"].ToString()); 
       y = Double.Parse(Request["y"].ToString()); 
       //Run some more code 
       Response.Redirect("Default.aspx?Param1=xxxx&Param2=xxxx"); 
       //passed the params in the redirect. 
      } 

:

여기
window.location.replace("ZoomAndCenter.aspx?x=" + (e.pageX - posX) + "&y=" + (e.pageY - posY)) 

내 ZoomAndCenter.aspx 어떻게 생겼는지입니다 그런 다음 Default.aspx에서

if(request["param1"] == "something") 
{ 
//do something 
}