2015-01-20 5 views
1

이 방법은 aspx.cs 파일을 갖는 2 개 개의 public 클래스로 작성 :ajax 호출이 정적 웹 메소드를 호출하지 않는 이유는 무엇입니까? 내가 정적 웹 메소드를 호출하고

public class Employee 
{ 
    public string EmployeeNumber; 
    public string FullName; 
    public string LoginName; 
    public string EmailID; 
    public string Phone; 
} 

public partial class CustomWebMethods : LayoutsPageBase 
{ 
    [WebMethod] 
    public static List<Employee> GetEmployeeDetails(string employeeLoginName) 
    { 
     List<Employee> lstEmployeeDetail = new List<Employee>(); 
     //do something 
     return lstEmployeeDetail; 
    } 
} 

그때 아약스 호출이 잘 작동 동일한 페이지에있는 공용 클래스 직원을 유지합니다.

그러나 직원을 다른 클래스 라이브러리 프로젝트로 이동하고 해당 프로젝트의 참조를 추가하면 아약스 호출이 작동하지 않습니다. 왜?

자바 메소드는 웹 메소드를 전혀 호출 할 수 없습니다.

답변

1

이것은 내부 작업 속성이 WebMethod이기 때문에 발생합니다. 이 속성으로 일부 메소드를 표시하면 PageName.aspx/MethodName url을 통해 사용할 수 있습니다.

그런 다음이 메서드를 외부 라이브러리로 이동 한 후에도 페이지 메서드에서 이동 한 다음 사용할 수 없습니다.

코드를 리팩터링하려는 경우 WebService을 프로젝트에 추가해야합니다. 해당 클래스에서 다른 라이브러리의 메소드를 호출 할 수 있습니다.

<asp:ServiceReference InlineScript="true" Path="~/CustomersService.asmx"/> 

을 또는이 같은 그것을위한 ScriptManager를 사용 :

당신은 또한 다음과 같은 클라이언트에 대한 자바 스크립트 프록시를 생성 할 수 있습니다 당신이 use this proxy instead of ajax call을 할 수있는 후

<asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true" /> 

합니다.

<script type="text/javascript"> 
function Add() 
{ 
    var x = $get("txtX").value; 
    var y = $get("txtY").value; 
    PageMethods.Add(x, y, OnWSAdd); 
} 

function OnWSAdd(result) 
{ 
    $get("spanAddResult").innerHTML += result; 
} 
</script> 

Old, but great article about Understanding ASP.NET AJAX Web Services.

+0

내가 제대로을 가지고 있는지 확실하지 않습니다,하지만 지금까지 내가 내가 자바 스크립트에서 호출하고있는 기능 (GetEmployeeDetails)를 이동하고 있지 않다 이해, 난 그냥 직원 클래스를 이동하는 함수 (GetEmployeeDetails)가 – Mac

+0

@Mac을 사용하고 있습니다. 아니요, 저는 자바 스크립트에 대해 말하는 것이 아닙니다. 나는 당신이 단지 페이지의 일부인 메소드를 자바 스크립트를 통해 액세스 할 수 없다고 말하고 있습니다. – VMAtm