2016-10-25 3 views
1

Ich habe ein MVC-Web-Projekt. In einer cshtml Seite des Projektes habe ich einen Ajax-Code wie folgt: -Ergebnis Variable nicht accessbile in HtmlHelper innerhalb Ajax Erfolg

$.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"); 
     } 
    }); 

Die Antwort auf Ajax-Aufruf ist ein JSON serialisiert Objekt, das zwei Daten memebers hat - Bericht und AccessToken. In der Erfolgsfunktion von Ajax kann die Warnung auf das result.AccessToken zugreifen und es korrekt ausdrucken. Wenn ich jedoch versuche, auf result.AccessToken innerhalb der Html.PowerBIReportFor() - Funktion zuzugreifen, wird auf der Seite der folgende Fehler angezeigt: "Das Namensergebnis existiert nicht im aktuellen Kontext".

Kann mir jemand dabei helfen?

+0

Was Sie beachten müssen, ist, dass der Aufruf von Html.PowerBIReportFor() ** auf dem Server ** gerendert wird. Es wird keine JavaScript-Kenntnisse auf Ihrer Seite haben. Ich bin nicht vertraut mit der PowerBIReportFor(), aber eine Option wäre, den Bericht in eine Javascript-Variable zu laden, dann führen Sie Ihren AJAX-Aufruf für das Zugriffstoken. Wenn es erfolgreich ist, legen Sie die Berichtsausgabe in Ihr Dokument und setzen Sie das Attribut powerbi_access_token mit JQuery.attr() –

+0

Dank JohnMorgan. – Srikant

Antwort

0

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

Die PowerBIReportFor Methode verwendet das Modellobjekt vom Controller. Das Model-Objekt sollte Report (Microsoft.PowerBI.Api.V1.Models.Report) und AccessToken (Zeichenfolge) enthalten, damit die Methode dynamisch ein Div-Element erstellt, das die Information verwendet. um Attribute zu generieren.

Dies funktioniert friedlich, wenn eine Ansicht von einem Controller geladen wird. In meinem Fall möchte ich den Bericht jedoch nur in die aktuelle Ansicht laden. Wenn ich Teilansicht lade, wird das ganze Layout wieder geladen.

Endlich habe ich dieses Problem gelöst, indem ich das div-Element selbst aus dem Inhalt des Result-Objekts im Ajax-Erfolgsereignis aufgebaut habe.