2016-10-25 4 views
1

MVC 웹 프로젝트가 있습니다. 프로젝트의 cshtml 페이지에서 I는 아래의 Ajax 코드를 가지고있다 -결과 변수가 Ajax 성공 내에서 HtmlHelper의 accessbile이 아님

$.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     cache: false, 
     contentType: false, 
     processData: false, 
     url: '@Url.Action("Report", "Report")', 

     data: data, 
     success: function (result) { 
      if (result) { 
       alert(result.AccessToken); // ----> result.AccessToken is accessible here 
       $("#load-report").html(@Html.PowerBIReportFor(m => m.Report, new { id = "pbi-report", style = "height:68vh", powerbi_access_token = result.AccessToken }));   // ----> result.AccessToken is not accessible here   
      } 
      else { 
       alert("server Error: Not able to load report, please try again"); 
      } 
     }, 
     error: function() { 
      alert("Error in uploading the data"); 
     } 
    }); 

Ajax 호출에 대한 응답은 두 개의 데이터 멤버들있는 JSON 직렬화 된 객체입니다 -보고서 및 AccessToken합니다. Ajax의 성공 기능에서 경고는 결과에 액세스 할 수 있습니다. 액세스 시도를 올바르게 인쇄합니다. 그러나 Html.PowerBIReportFor() 함수 내에서 result.AccessToken에 액세스하려고하면 페이지에 "이름 결과가 현재 컨텍스트에 없습니다"라는 오류가 표시됩니다.

아무도 도와 줄 수 있습니까?

+0

기억해야 할 것은 Html.PowerBIReportFor()에 대한 호출이 ** 서버 **에 렌더링된다는 것입니다. 페이지의 JavaScript에 대한 지식이 없습니다. PowerBIReportFor()에 익숙하지 않지만 한 가지 옵션은 보고서를 자바 스크립트 변수로로드 한 다음 액세스 토큰에 대한 AJAX 호출을 수행하는 것입니다. 성공하면 보고서 출력을 문서에 넣은 다음 JQuery.attr()을 사용하여 powerbi_access_token 속성을 설정하십시오. –

+0

감사합니다. JohnMorgan. – Srikant

답변

0

@ Html.PowerBIReportFor (m => m.Report, new {id = "pbi-report", style = "height : 68vh", powerbi_access_token = Model.AccessToken});

PowerBIReportFor 메서드는 컨트롤러에서 오는 Model 개체를 사용합니다. Model 개체에는 보고서 (Microsoft.PowerBI.Api.V1.Models.Report) 및 AccessToken (문자열)이 포함되어야 메서드가 정보를 사용하여 div 요소를 동적으로 작성합니다. 속성을 생성합니다.

컨트롤러에서보기를로드하면 원활하게 작동합니다. 그러나 제 경우에는 보고서를 현재보기로로드하려고합니다. 부분 뷰를로드하면 전체 레이아웃이 다시로드됩니다.

마지막으로 아약스 성공 이벤트의 결과 개체 내용에서 div 요소를 직접 작성하여이 문제를 해결했습니다.