2011-08-29 1 views
1

도움이 필요합니다. 다소 복잡 할 수 있습니다. 내가 js 파일 내부에서 somethings 않는 WebMethod를 호출합니다. 그것이하는 일 중 하나는 app_code 내의 클래스에있는 일부 함수를 호출한다는 것입니다. 의 App_Code에서 클래스 내 페이지에 GridView 컨트롤을 얻고 나는 그것을 업데이트 할 필요가에서 WebMethod에서 GridView 업데이트

, 그래서이 수행

ActiveGridView.DataSource = (ActiveDataTable).DefaultView; 
ActiveGridView.DataBind();  

내가에서의 App_Code에있는 함수를 호출 할 때 위의 잘 작동을 일반 함수이지만 WebMethod 내에서 그리드를 호출 할 때는 그리드를 업데이트하지 않습니다.

이 아이디어를 해결하는 방법은 무엇입니까?

WebMethod에서 데이터를 반환 한 다음 클라이언트 측에서 그리드를 업데이트 할 수 없습니다.

이 사실 나는 updatePanel을 사용하고

을 편집, 내 영문 코드는 다음과 같습니다

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
       <ContentTemplate> 
        <asp:GridView ID="MappedDataGrid" runat="server" CssClass="pipesTbl"> 
        </asp:GridView> 
       </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" /> 
       </Triggers> 
      </asp:UpdatePanel> 

을 그리고 페이지에서 이벤트에서 채우기 그리드를 호출 할 때 다시 잘 작동, 하지만 webMethods가 그리드를 채우기 위해 배우자 인 app_code의 클래스를 호출 한 후에 호출하면 리필되지 않습니다. 편집 다시

나는 문제가이 라인에 생각 :

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="MappedDataGrid" EventName="DataBinding" /> 
</Triggers> 

하지만 아마 뭔가를 놓친 거지, 작동하지 않았다 :

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" /> 
</Triggers> 

나는이로 변경 시도 , 그리고 이것은 나에게 모두 새로운 것이기 때문에, 나는 무엇을 해야할지 몰랐다.

내가 말한대로 작동하게하려면 어떻게해야합니까?

답변

1

WebMethod를 호출하면 실제로 페이지를로드하지 않고 페이지 수명주기 동안 실행하지 않습니다. 메서드가 페이지 코드 숨김 클래스의 일부분이더라도이 메서드로 호출하면 페이지의 컨트롤을 사용할 수 없게됩니다. 웹 서비스를 페이지 클래스의 메소드 밖으로 만드는 바로 가기입니다.

당신이하고 싶은 말에 따라 UpdatePanel을 사용하는 것이 좋습니다. 그들과 함께, 실제로 페이지에 대한 전체 포스트 백을 수행하고 페이지 컨트롤에 필요한 모든 것을 변경할 수 있습니다.

업데이트

UpdatePanel을 가진 점은 더 이상 당신의 WebMethod를 사용하지 않을 것입니다. 업데이트 패널에 대한 트리거 인 일반 버튼을 클릭하면 코드 숨김 (버튼의 클릭 이벤트를 처리하고 코드를 호출하여 그리드를 바인딩)에서 일반적인 것처럼 격자를 업데이트합니다. 그리드 만 패널에 있기 때문에 화면에서만 그리드가 새로 고쳐집니다.

+0

감사합니다. 나는 질문을 편집했다. 내 코드를 본 후에 당신이 말한 것에 대해 더 구체적으로 설명 할 수 있을까? 감사합니다 – Ovi

1

페이지의 수명주기에서 ASP.NET 페이지를 조작하는 메서드를 호출하면 결과를 볼 수 없습니다. 데이터를 ASP에 바인드하려는 경우.NET 컨트롤을 사용하려면 페이지 라이프 사이클에 있어야하며, 자바 스크립트에서 웹 메서드를 호출하면 해당 메서드가 수명주기에서 실행됩니다.

DataPan을 UpdatePanel에 임베드하는 AJAX로 채우십시오.

+0

감사합니다. 나는 질문을 편집했다. 내 코드를 본 후에 당신이 말한 것에 대해 더 구체적으로 설명 할 수 있을까? 감사 – Ovi