2014-09-04 7 views
0

다음 코드 스 니펫이 있습니다. 정적이 아닌 메소드에서만 PbcTreeView에 액세스 할 수 있으므로 Page_Load 중에 호출합니다. 그러나 setTreeView() 메서드는 b 개체에 액세스 할 수 없으므로 buildTreeView() 메서드를 호출 할 수 없습니다. (setTreeView()는 WebMethod 규칙에 따라 정적이어야하며 TreeView를 사용하기 때문에 buildTreeView는 정적 일 수 없습니다). 방법에 내가 가지고있는 b.buildTreeView()과 비슷한 것을 어떻게 할 수 있습니까?정적 메서드로 (WebControl을 사용하는) 비 정적 메서드를 어떻게 호출합니까?

감사

protected void Page_Load(object sender, EventArgs e) 
    { 
     BuildPbcTree b = new BuildPbcTree(PbcTreeView); 
    } 

    [WebMethod] 
    public static void setTreeView() 
    { 
     b.buildTreeView(); //how do I do this?? 
    } 

    public class BuildTree 
    { 
     TreeView Tree; 
     public BuildTree(TreeView t) 
     { 
      Tree = t; 
     } 
     public void buildTreeView() {...//implementation} 
    } 
+5

그렇게 할 수 없습니다. AJAX 메서드의 요점은 페이지 수명주기가 없다는 것입니다. – SLaks

+0

@ SLaks 고마워요, 내가하려는 일에 대한 해결책으로 무엇을 제안 하시겠습니까? –

+0

싱글 톤 클래스에서 BuildPbcTree를 포장해야합니다. http://www.dotnetperls.com/singleton –

답변

0

당신은 정적 방법으로 클래스의 인스턴스를 전달할 수 있습니다. 예를 들어, Page_Load에서 :

SetTreeView(b); 

여기서는 BuildTree 클래스를 허용하도록 웹 메소드를 변경한다고 가정합니다.

+0

그건 도움이되지 않습니다; 그는 자신의 페이지에서 렌더링 된 컨트롤을 수정하려고합니다. – SLaks

0

귀하의 페이지에서 PbcTreeView이 (가) 제어되고 있다고 가정합니다.

그런 경우 운이 없다. AJAX 호출 (웹 메소드) 중에는 서버 측 컨트롤을 수정할 수 없습니다. AJAX 호출은 다음과 같이 사용하도록 설계되었습니다.

  1. JavaScript 코드로 웹 메서드를 호출합니다.
  2. 웹 메서드는 데이터베이스 조회 또는 계산을 수행하고 결과를 반환합니다.
  3. 귀하의 JavaScript 코드은 사용자 인터페이스를 업데이트합니다.

웹 메서드를 업데이트하려고합니다. 그것은 작동하지 않습니다. 그렇게해야한다면, UpdatePanel에 포스트 백 또는 비동기 포스트 백을 사용하십시오.

관련 문제