2010-07-13 5 views
0

ASP.NET 페이지의 세션 객체에 저장된 변수를 jQuery와 함께 전달하려고합니다. 서버에서 실행중인 프로세스의 진행률을 백분율로 나타냅니다.jquery를 사용하여 ASP.NET 페이지의 세션 데이터에 액세스

즉 : 여기 몇 가지 답변을 통해 검토 한

Session['progress'] = 37; 

; 내 코드가 제대로 여기 aswered 질문과 같은 방법을 사용

<head> 
... 
    <script type="text/javascript"> 
     function updateProgress() { 
      var progress = '<%Session["progress"].ToString();%>'; 
     } 
    </script> 
... 
</head> 

는 ASP.NET 컴파일러는 NullPointerException을 반환합니다. Session 객체가 아직 인스턴스화되지 않았기 때문에 이것이 확실한 지 확신 할 수 없습니다 (컴파일 타임에 발생 함). 또는 아마도 세션 개체가 제대로 변수를받지 못했습니다 (이 경우에 대한 검사 갈 수 있습니까?)

아이디어가 있습니까?

jQuery 진행률 표시 줄이 사용자에게 업데이트 될 수 있도록 서버에서 클라이언트로이 값을 전달하는 방법을 찾아야합니다.

감사합니다. HTML 페이지

답변

0

를 사용하여 데이터를 출력

<%=Session["progress"].ToString()%> 

나는 당신이 일이 발생하는 순서를 오해 생각합니다. SageNS는 오류를 발견했지만 문제를 해결하지 못했습니다.

단순히이 코드는 자바 스크립트 코드에 번호를 기록하고, 사용자는보고 :의 UpdateProgress에

<head> 
... 
    <script type="text/javascript"> 
     function updateProgress() { 
      var progress = '37'; 
     } 
    </script> 
... 
</head> 

연속 통화()는 항상 당신은 jQuery의를 사용해야합니다 (37)

반환합니다. 서버의 진행 상황을 주기적으로 업데이트하려는 경우 ajax() 함수를 사용하여 서버에 대한 비동기 호출을 수행합니다.

+0

나는 이것을 이미했지만, 페이지를 컴파일 할 때 NullPointerException이 발생합니까? – icecreamsoop

2

+0

Ajax 호출은 정적 웹 메소드에만 적용 할 수 있으며, 정적이 아닌 객체에 저장된 데이터에는 액세스 할 수 없습니다. 정적 메서드를 통해 이미 존재하는 개체에 저장된 데이터에 액세스해야합니다. 이는 내가 너무 확신하지 못하는 것입니다. – icecreamsoop

3

jQuery를 사용하여 페이지의 세션 변수에서 실시간으로 변경되는 번호를 얻으려면 일부 유형의 아약스 요청을해야합니다. 세션 상태 값에 액세스하려면 [WebMethod] 함수를 작성하여 jQuery 요청에 대한 데이터 가져 오기/보내기를 보내면됩니다.

jQuery를 요청 :

jQuery.ajax({ 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: '{}', 
    dataType: 'json', 
    url: 'Default .aspx/TestMethod', 
    success: function(result){ 
     alert(result.d); 
    } 
}); 

서버 페이지의 WebMethod :

using System; 
using System.Web.Services; 

namespace JqueryAjaxText 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     [WebMethod] 
     public static string TestMethod() 
     { 
      return Session["progress"].ToString(); 
     } 
    } 
} 
+0

나는이 접근법을 이미 시도했다. 다음 오류가 발생했습니다 : "CS0120 : 비 정적 필드, 메서드 또는 속성 'System.Web.UI.Page.Session.get'에 대해 개체 참조가 필요합니다." – icecreamsoop

+0

'Session [ "진행률을 사용할 수 있습니까? "] .ToString(); ' 정적 WebMethod에서? –

+0

정적 메서드의 세션, 어떻게 했습니까? –

1

당신은 재커리의 대답을 구축하고 WCF 서비스를 생성하고 $의 아약스를 전환하여 한 단계 더 걸릴 수 있습니다() POST 대신 GET을 요청하십시오. POST (POST가 그렇게 크지 않은 것은 아닙니다)만큼 큰 요청은 아니지만 올바른 HTTP 동사를 사용하게됩니다. (POST는 삽입에 사용되며 데이터를 검색하려면 GET을 사용해야합니다.)

귀하의 jQuery를 호출은 다음과 같을 수 있습니다 :

jQuery.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'MyService.svc/GetServerProgress', 
    success: function(result){ 
     alert(result.d); 
}); 

당신은 다음 WCF 서비스를 만들고 GetServerProgress라는 이름의 서비스 방법을 만들 것입니다.

[OperationContract] 
    [WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetServerProgress")] 
    public int GetServerProgress() 
    { 
     return 37; 
    } 

마지막으로, 당신은 아마 클라이언트가 주기적으로 WCF 서비스에서 서버의 진행 상황을 검색하는에 $의 아약스에() 메소드를 setTimeout()를 호출 일부 자바 스크립트를 할 수 있습니다.

행운을 빌어 요 !!

관련 문제