2016-10-25 1 views
1

У меня есть веб-проект MVC. В cshtml странице проекта, у меня есть код Ajax, как показано ниже: -переменная результата не accessbile в HtmlHelper внутри Ajax success

$.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 Сериализованный объект, который имеет два данных - членов Ассоциации Отчет и маркер доступа. В функции успеха Ajax предупреждение может получить доступ к результату. AccessToken и печатает его правильно. Однако, когда я пытаюсь получить результат result.AccessToken внутри функции Html.PowerBIReportFor(), на странице появляется сообщение об ошибке «Результат имени не существует в текущем контексте».

Может ли кто-нибудь помочь мне с этим?

+0

Что вы должны помнить, так это то, что вызов на Html.PowerBIReportFor() отображается ** на сервере **. Он не будет знать JavaScript на вашей странице. Я не знаком с PowerBIReportFor(), но один из них - загрузить отчет в переменную javascript, а затем выполнить вызов AJAX для токена доступа. Если это успешно, поместите отчет в свой документ, а затем установите атрибут powerbi_access_token, используя JQuery.attr() –

+0

Спасибо JohnMorgan. – Srikant

ответ

0

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

PowerBIReportFor Метод принимает объект модели, поступающий от контроллера. Объект Model должен содержать Отчет (Microsoft.PowerBI.Api.V1.Models.Report) и AccessToken (строка), так что метод динамически создает элемент div с использованием информации. для генерации атрибутов.

Это работает мирно, если представление загружается с контроллера. Однако в моем случае я просто хочу загрузить отчет в текущее представление. Если я загружу частичный просмотр, весь макет снова загружается.

Я, наконец, решил эту проблему, построив элемент div самостоятельно из содержимого объекта Result в событии ajax success.